【问题标题】:Is it possible to detect the number of return values of a function in python?是否可以检测python中函数的返回值数量?
【发布时间】:2016-09-04 22:29:12
【问题描述】:

我想写一个这样的python函数:

def foo():
   if x:
       return y
   else:
       return y, z

有可能吗?如果可能的话,我如何检测返回值的数量?

【问题讨论】:

  • 返回一个元组还是一个列表?
  • 是的,我知道,但我想知道是否可以这样做?
  • 这样做的目的是什么?之后您想如何处理这些数据?
  • 有可能,你可以检查返回值是否为tuple类型,但这在编程中是一种非常糟糕的做法。考虑使用return (y,)之类的方法返回一致数量的值,或者至少总是返回一个元组
  • 您可以在返回值上尝试len,但这可能没有用。如果一个函数返回一个列表或两个列表的元组,那么len 有用吗?顺便说一句,你说你知道可以返回一个元组,但是 return y, z 正在返回一个元组,那么为什么要问这个问题呢?

标签: python function output overloading


【解决方案1】:

将函数修改为始终返回 2 元组可能更容易:

def foo():
   if x:
       return y, None
   else:
       return y, z

或者如果没有令人信服的理由,我会做什么:

def foo( z_default = None):  
   # plug in whatever default makes sense in place of None
   # and the caller can override the default if he wants to
   if x:
       return y, z_default
   else:
       return y, z

【讨论】:

    【解决方案2】:

    是的,很有可能:

    def foo():
        if x:
            return y
        else:
            return y, z
    
    result = foo()
    the_number_of_return_values_of_foo_function = \
            1 if type(result) is not tuple else len(result)
    

    晚安。

    【讨论】:

      【解决方案3】:

      是的,这是可能的。但是,当您的 if 条件为 false 时,您的函数将在索引 0 处返回一个带有 y 和在索引 1 处的 z 的元组。您可以在元组变量中捕获返回值并使用 len() 函数检查返回值的数量对于元组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        • 2012-08-19
        • 2014-10-23
        • 1970-01-01
        • 2022-01-20
        相关资源
        最近更新 更多