如何从*args返回多个值?
我有一个叫做 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
4 个回答
1
args 是一个列表。如果你返回一个序列(比如列表或元组),Python 会尝试把这些值一个一个地赋给你的 d、e、f 变量。所以下面的代码是可以的。
def hello(*args):
return args
d, e, f = hello(1,2,3)
只要你在 *args 列表中有正确数量的值,它们就会被赋给你的变量。如果数量不对,就会出现一个叫 ValueError 的错误。
d, e, f = hello(1, 2) #raise ValueError
希望这能帮到你。
1
只需要返回一个元组:
def hello(*args):
return 1, 2, 3
...或者...
return (1, 2, 3)
14
所以,你想要返回一个新的元组,它的长度和传入的参数(也就是 args 的长度)是一样的,并且这个新元组的值是根据 args[0]、args[1] 等计算出来的。需要注意的是,你不能直接修改 'args',比如说不能写 args[0] = xxx,这样做是非法的,会报错 TypeError: 'tuple' object does not support item assignment。
你需要做的是返回一个 新的 元组,它的长度和 len(args) 一样。
举个例子,如果你想让你的函数对每个参数加一,可以这样做:
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)
将会返回一个包含3个元素的元组,值分别是2、3和4。
这个函数可以处理任意数量的参数。