python – 如何从函数中获取函数的名称(或者对函数的“自我”引用)?

This answer显示函数的内置__name__属性可以从函数外部使用,即print f .__ name__.但是,如何从函数本身中获取此属性?

只使用不合格的__name__没有帮助:print __name__ print __main__.

在f()中使用print f .__ name__看起来很愚蠢 – 我也可以输入“f”.

或者,是否有一种函数的自身对象,即我可以获得指向以常见方式执行的函数的指针吗?

我不喜欢this question中提出的方法 – 它觉得为这么简单的任务乱砍堆栈不是正确的方法.

动机:我有一个{keyword:function}的字典,从输入中读取关键字并执行适当的功能.我希望每个函数只执行一次,所以我希望每个函数在执行时在一些数据结构中注册自己.我知道我可以在字典中做到这一点,但我想为此使用单独的数据结构.

Python版本是2.6.4 BTW

最佳答案 也许你应该使用onlyonce装饰器装饰你正在调用的每个函数?那将是更加pythonic.概念证明如下.

called = set()

def onlyonce(fn):
    def decorated(*largs, **kargs):
        if fn not in called:
            called.add(fn)
            print "Calling"
            fn(*largs, **kargs)
        else:
            print "Already called"
    return decorated



@onlyonce
def test_function():
    print "I am getting called now"


test_function()
test_function()
test_function()
test_function()

此外,函数是“不可变的”,可以存储为字典键.您不必依赖名称.根据您的使用情况,这可能是一个优势(或缺点).

点赞