我想通过指向该函数的指针来获取函数参数的值。
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
答案 0 :(得分:0)
通过签名功能轻松创建该功能的签名: 从检查进口签名
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
与参数中包含的其余对象类似。
答案 1 :(得分:0)
您走错了路。在新版问题中查看代码,您正在尝试提取Church pair的第一个元素。
cons(3, 4)
评估为一个函数,该函数在传递另一个函数f
时返回f(3, 4)
。要提取3
,您应该向其传递一个带有两个参数并返回其第一个参数的函数:
def car(pair):
def firstarg(x, y):
return x
return pair(firstarg)
然后car(cons(3, 4))
调用cons(3, 4)(firstarg)
,后者调用firstarg(3, 4)
,并返回3
。
答案 2 :(得分:-1)
通过您的代码,检索这些值的唯一方法是使它们像关键字参数一样,因此它们具有默认值。
def foo(a=3, b=4):
return 'test'
if __name__ == '__main__':
p = foo # pointer to function
print(type(p)) # function
print(p.__defaults__) # Returns (3, 4)
# local_a = p.a or p[0]
# local_b = p.b or p[1]