在python中使用参数列表调用函数

我试图在python中的另一个函数中调用一个函数,但是找不到正确的语法。我想做的是这样的:


def wrapper(func, args):

    func(args)


def func1(x):

    print(x)


def func2(x, y, z):

    return x+y+z


wrapper(func1, [x])

wrapper(func2, [x, y, z])

在这种情况下,第一个电话可以使用,而第二个则不能。我要修改的是包装函数,而不是被调用的函数。


慕神8447489
浏览 674回答 3
3回答

慕尼黑5688855

为了扩大其他答案:在该行中: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+zwrapper1(func2, 1, 2, 3)wrapper2(func2, [1, 2, 3])在中wrapper2,列表是显式传递的,但是在两个包装器中都args包含list [1,2,3]。

隔江千里

问题的字面答案(完全按照您的要求进行操作,仅更改包装器,而不更改函数或函数调用)仅是更改行func(args)阅读func(*args)这告诉Python接受给定的列表(在本例中为args),并将其内容作为位置参数传递给函数。这个技巧在函数调用的两个方面都起作用,因此定义的函数如下:def func2(*args):    return sum(args)将能够接受与您抛出的位置参数一样多的位置参数,并将它们全部放入名为的列表中args。我希望这有助于澄清一些事情。请注意,使用dicts // keyword参数也可以使用**代替*。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python