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