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

问题描述 投票:0回答:3

我想将传递给函数(

func1
)的所有参数作为参数传递给
func2
内的另一个函数(
func1
) 这可以通过被调用的
*args, *kwargs
中的
func1
并将它们传递给
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

python function arguments
3个回答
72
投票

显式优于隐式,但如果您真的不想输入几个字符:

def func1(a=1, b=2, c=3):
    func2(**locals())

locals()
都是局部变量,所以在调用
func2
之前你不能设置任何额外的变量,否则它们也会被传递。


12
投票

如果 func1 的参数只是关键字参数,你可以这样做:

def func1(a=1, b=2, c=3):
    func2(**locals())

7
投票

正如其他人所说,如果

locals()
在调用
func1()
之前创建新变量,则使用
func2()
可能会导致您传递比预期更多的变量。

这可以通过首先调用

locals()
来规避,如下所示:

def func1(a=1, b=2,c=3):
    parameters = locals()

    d = parameters ["a"] + parameters ["b"]

    func2(**par) #the value of `d` is not passed to func2.

如果我们像

func2(**locals())
那样进行函数调用,那么
d
就会被添加为参数。

© www.soinside.com 2019 - 2024. All rights reserved.