为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕神8447489 2019-11-23 10:53:19
我试图在python中的另一个函数中调用一个函数,但是找不到正确的语法。我想做的是这样的:def wrapper(func, args):    func(args)def func1(x):    print(x)def func2(x, y, z):    return x+y+zwrapper(func1, [x])wrapper(func2, [x, y, z])在这种情况下,第一个电话可以使用,而第二个则不能。我要修改的是包装函数,而不是被调用的函数。
查看完整描述

3 回答

?
慕尼黑5688855

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]。


查看完整回答
反对 回复 2019-11-23
?
隔江千里

TA贡献1906条经验 获得超10个赞

问题的字面答案(完全按照您的要求进行操作,仅更改包装器,而不更改函数或函数调用)仅是更改行


func(args)

阅读


func(*args)

这告诉Python接受给定的列表(在本例中为args),并将其内容作为位置参数传递给函数。


这个技巧在函数调用的两个方面都起作用,因此定义的函数如下:


def func2(*args):

    return sum(args)

将能够接受与您抛出的位置参数一样多的位置参数,并将它们全部放入名为的列表中args。


我希望这有助于澄清一些事情。请注意,使用dicts // keyword参数也可以使用**代替*。


查看完整回答
反对 回复 2019-11-23
  • 3 回答
  • 0 关注
  • 673 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信