将一个函数的所有参数传递给另一个函数

96 投票
4 回答
58185 浏览
提问于 2025-04-16 00:33

我想把传给一个函数(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 之前,你不能设置任何额外的变量,否则这些变量也会被传过去。

撰写回答