通过指向此函数的指针获取函数参数值?

Get function arguments value by pointer to this function?

我想通过指向该函数的指针获取函数参数的值。

def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair

def car(cons):
    # local_a = cons.a
    # return local_a
    pass

if __name__ == '__main__':
    assert car(cons(3, 4)) == 3

通过签名函数很容易为函数创建签名: 从检查导入签名

def someMethod(self, arg1, kwarg1=None):
    pass

sig = signature(someMethod)

现在,您可以通过字符串快速查看它的参数:

str(sig)  # returns: '(self, arg1, kwarg1=None)'

或者您也可以通过 sig.parameters 获取属性名称到参数对象的映射。

params = sig.parameters 
print(params['kwarg1']) # prints: kwarg1=20

此外,您可以在 sig.parameters 上调用 len 以查看此函数需要的参数数量:

print(len(params))  # 3

params 映射中的每个条目实际上是一个 Parameter 对象,它具有使您的生活更轻松的更多属性。例如,抓取一个参数并查看其默认值现在很容易执行:

kwarg1 = params['kwarg1']
kwarg1.default # returns: None

参数中包含的其余对象也类似。

你走错了路。查看问题新版本中的代码,您正在尝试提取 Church pair.

的第一个元素

cons(3, 4) 求值为一个函数,当传递给另一个函数 f、returns f(3, 4) 时。要提取 3,您应该向它传递一个带有两个参数的函数和 returns 它的第一个参数:

def car(pair):
    def firstarg(x, y):
        return x
    return pair(firstarg)

然后car(cons(3, 4))调用cons(3, 4)(firstarg),调用firstarg(3, 4),returns3.