python 获取传递函数的参数

python get parameters of passed function

我想将函数 f(a=1,b=2) 传递给 g 并在 g

中使用 'a' 值
def f(a,b): pass

def g(f): #print f.a

g(f(1,2)) 应该导致输出 1

我查看了 inspect 模块,但似乎无法在 g 中找到 f

这是我的编程知识所掌握的知识:

def g(f):
  print(list(inspect.signature(f).parameters.keys()))

g(f(1,2)) 结果:TypeError: None is not a callable object

这是不可能的。当您调用 g(f(1,2)) 时,f(1,2)g 运行之前完成。唯一可能的方法是 f 到 return 它的参数。

您需要适当地调用 g,因此 f 作为函数,是一个参数:

g(f, 1, 2)

现在将其应用到您的函数中:

def g(f, *args):
  print(list(inspect.signature(f).parameters.keys()))

... 从这里开始,您可以遍历 args 以正确调用 f.

这让你感动吗?

你可以这样做:

def f(a, b):
    print(a)
    print(b)

然后定义wrapper为:

def wrapper(func, a, b):
    func(a, b)

或者,如果您想要更大的灵活性,请使用 *args:

def wrapper(func, *args):
    func(*args)

如果参数数量不匹配,这种灵活性会带来一些风险。这意味着您需要注意所有传递给 wrapperfunc 具有一致的签名。

您可以使用 **kwargs 来帮助解决上述问题,然后:

def wrapper(func, **kwargs):
    func(**kwargs)

然后调用 wrapper 看起来像:

wrapper(f, a=1, b=2)

这将允许更大的灵活性,func 的签名可以根据需要变化。

您可以将 wrapper 变成 decorator 但这是另一个问题。