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

时间:2018-11-17 19:32:43

标签: python pointers function-pointers

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

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

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]