return_args() #that returns 4 variables.
这是一个误解,它不返回 4 个变量。像这样的函数:
def return_args():
return 1, 2, 3, 4
实际上是这样做的:
def return_args():
mytuple = (1, 2, 3, 4)
return mytuple
返回一个东西。
另一方面是 Python 中的“解构赋值”,也就是这样做的能力:
a, b = 1, 2
这是一种同时分配/绑定两个变量的方法,但它实际上是创建然后解压缩序列(1,2)。你可以写:
a, b, c, d = return_args()
看起来你返回了四个东西并将它们绑定到四个变量名,这是一个干净、有用的抽象,但事实并非如此——实际上创建了一个序列(其中包含 4 个东西),然后将其解压缩为匹配一系列变量名。
这两个抽象泄漏,当你尝试这样做时,你会发现 return_args() 正在返回一个东西:
call(return_args()) #it errors out saying, that's 1 arguments, not 4 arguments
其他答案正确地建议 call(*return_args()) 作为一种解决方案,它记录在“解包参数列表”下:http://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists
(另一方面是为接受此处讨论的可变数量参数而创建的函数:https://stackoverflow.com/a/11550319/478656)