【问题标题】:How to return multiple values from *args?如何从 *args 返回多个值?
【发布时间】:2012-01-12 23:34:37
【问题描述】:

我有一个 hello 函数,它需要 n 个参数(见下面的代码)。

def hello(*args):
  # return values

我想从*args 返回多个值。怎么做?例如:

d, e, f = hello(a, b, c)

解决方案:

def hello(*args):
  values = {} # values
  rst = [] # result
  for arg in args:
    rst.append(values[arg])
  return rst

a, b, c = hello('d', 'e', f)
a, b = hello('d', 'f')

只是返回列表。 :) :D

【问题讨论】:

  • 不知道你的意思。 return args 将从 *args 返回多个值。
  • 重复,这里详细回答。 [堆栈溢出 ret mul val python][1] [1]: stackoverflow.com/questions/354883/…
  • 在 hello 函数中,我正在为变量赋值。我从 *args 中得到这些变量。你知道 args 是动态的。所以我不知道从动态变量 /args/ 中返回多个值,例如示例。

标签: python function python-3.x python-2.x


【解决方案1】:

因此,您希望返回一个与 args 长度相同的新元组(即 len(args)),其值是根据 args[0]、args[1] 等计算得出的。 请注意,您不能直接修改“args”,例如您不能分配 args[0] = xxx,这是非法的,并且会引发 TypeError: 'tuple' object does not support item assignment。 然后你需要做的是返回一个长度与 len(args) 相同的 new 元组。 例如,如果您希望您的函数为每个参数添加一个,您可以这样做:

def plus_one(*args):
    return tuple(arg + 1 for arg in args)

或者用更详细的方式:

def plus_one(*args):
    result = []
    for arg in args: result.append(arg + 1)
    return tuple(result)

然后,做:

d, e, f = plus_one(1, 2, 3)

将返回一个三元素元组,其值为 2、3 和 4。

该函数适用于任意数量的参数。

【讨论】:

  • 你知道 'args' 参数是动态的。如何从动态'args'返回多个值?抱歉英语不好。请看我的评论。
  • 哇。比我更好的解决方案。感谢您分享你的知识。 :)
【解决方案2】:

只返回一个元组:

def hello(*args):
    return 1, 2, 3

...或...

    return (1, 2, 3)

【讨论】:

    【解决方案3】:

    args 是一个列表。如果您返回一个序列(列表、元组),Python 将尝试迭代并分配给您的 d、e、f 变量。所以下面的代码是可以的。

    def hello(*args):
       return args
    
    d, e,  f = hello(1,2,3)
    

    只要你有,*args 列表中的正确数量的值。它将分配给您的变量。如果没有,il 将引发 ValueError 异常。

    d, e, f = hello(1, 2) #raise ValueError
    

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      只需退回它们。例如,如果您想返回未修改的参数,请执行以下操作:

      def hello(*args):
          return args
      

      如果您想返回其他内容,请改为返回:

      def hello(*args):
          # ...
          # Compute d, e and f
          # ...
          return d, e, f
      

      【讨论】:

        猜你喜欢
        • 2018-08-17
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多