在Python中从内部函数对象获取外部函数的名称

5
假设在Python中有一个嵌套的函数,其中 outer 表示外部函数,inner 表示内部函数。外部函数为内部函数提供参数化,并返回这个参数化函数的实例。
我想要获取外部函数的名称,给定由外部函数返回的内部函数的实例。 代码如下:
def outer(a):
    def inner(x):
        return x*a
    return inner
p = outer(3)
print p  # prints inner
print p(3)  # prints 9

我该如何打印外部函数的名称,即outer,只给定p?谢谢!

你不能仅通过 print p 打印出 'outer',因为 'outer' 返回的是一个函数,而这个函数恰好是 'inner'。 - Tim
1
其实这不是一个坏问题,如果你正在寻找为什么你不能这样做 :) - FunkySayu
2个回答

4
你可以使用 functools.wraps:
from functools import wraps

def outer(a):
    @wraps(outer)
    def inner(x):
        return x*a
    return inner
p = outer(3)
print p  # <function outer at ...>

谢谢,看起来是一个优雅的解决方案! - the_max

0

这绝不是一个优雅的解决方案,我个人也不会使用它。但是它回答了你提出的问题。

def outer(a):
    def inner(x):
        return x*a
    inner.__name__ = 'outer'
return inner

print p
<function outer at 0x10eef8e60>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接