3 回答
TA贡献1848条经验 获得超2个赞
为了扩大其他答案:
在该行中:
def wrapper(func, *args):
*旁边的* args表示“将给定的其余参数放入一个称为args” 的列表中。
在该行中:
func(*args)
args此处旁边的* 表示“将这个称为args的列表,并将其“解包”到其余参数中。
因此,您可以执行以下操作:
def wrapper1(func, *args): # with star
func(*args)
def wrapper2(func, args): # without star
func(*args)
def func2(x, y, z):
print x+y+z
wrapper1(func2, 1, 2, 3)
wrapper2(func2, [1, 2, 3])
在中wrapper2,列表是显式传递的,但是在两个包装器中都args包含list [1,2,3]。
TA贡献1906条经验 获得超10个赞
问题的字面答案(完全按照您的要求进行操作,仅更改包装器,而不更改函数或函数调用)仅是更改行
func(args)
阅读
func(*args)
这告诉Python接受给定的列表(在本例中为args),并将其内容作为位置参数传递给函数。
这个技巧在函数调用的两个方面都起作用,因此定义的函数如下:
def func2(*args):
return sum(args)
将能够接受与您抛出的位置参数一样多的位置参数,并将它们全部放入名为的列表中args。
我希望这有助于澄清一些事情。请注意,使用dicts // keyword参数也可以使用**代替*。
添加回答
举报