将一个函数的所有参数传递给另一个函数
我想把传给一个函数(func1
)的所有参数,作为参数传给另一个函数(func2
),而这个操作是在func1
里面进行的。可以通过在func1
中使用*args
和*kwargs
来实现,然后把这些参数传递给func2
,但是有没有其他的方法呢?
最开始
def func1(*args, **kwargs):
func2(*args, **kwargs)
但是如果我的func1
的参数定义是
def func1(a=1, b=2, c=3):
我该如何把所有参数传给func2
,而不使用
def func1(a=1, b=2, c=3):
func2(a, b, c)
有没有类似于JavaScript中的callee.arguments
的方式?
4 个回答
8
正如其他人所说,使用 locals()
可能会导致你传递比预期更多的变量,特别是当 func1()
在调用 func2()
之前创建了新的变量时。
为了避免这个问题,可以在调用 locals()
时,先把它的内容复制一份,像这样:
def func1(a=1, b=2,c=3):
parameters = locals().copy()
d = parameters ["a"] + parameters ["b"]
func2(**parameters) #the value of `d` is not passed to func2.
如果我们像这样调用函数 func2(**locals())
,那么 d
就会被当作一个参数传进去。
13
假设func1的参数只有关键字参数,你可以这样做:
def func1(a=1, b=2, c=3):
func2(**locals())
75
明确比隐含要好,但如果你真的不想多打几个字符:
def func1(a=1, b=2, c=3):
func2(**locals())
locals()
是指所有的局部变量,所以在调用 func2
之前,你不能设置任何额外的变量,否则这些变量也会被传过去。