how to get function's name from within the function (or kind of “self” reference to the function)?
这个答案表明,函数有一个内置的
仅仅使用不合格的
从
或者,函数是否有一种
我不喜欢这个问题中提出的方法——它认为为这么简单的任务对堆栈进行黑客攻击是不合适的方法。
动机:我有一本
python版本为2.6.4 btw
如果不想"检查"堆栈,可以在方法上使用decorator将其存储在字典中,并避免启动两次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function_list = [] def method_singleton(function): global function_list def decorated_method(*args, **kwargs): if function.__name__ not in function_list: function_list.append(function.__name__) return function(*args, **kwargs) else: print"Method %s already called"%function.__name__ return decorated_method @method_singleton def method_to_decorate(arg1, arg2): pass |
其中"函数列表"是已经调用的函数列表(我不知道如何管理您的词典)
也许您应该用一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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() |
此外,函数是"不变的",可以存储为字典键。你不必依赖这些名字。这可能是一个优势(或劣势),取决于您的使用。