在JavaScript中,可以获得对该函数的引用
在其中,使用特殊变量/属性arguments.callee
。
例如,定义递归匿名函数可能很有用
(但不仅仅是为了那个)。
据我所知,在Python中也不是那么容易。
但我想可以使用inspect
模块,
或者一些神秘的技术。
你能告诉我怎么做吗?
我有问题
这不是我想要的,虽然名字听起来不错。
答案 0 :(得分:2)
我假设你知道JavaScript是arguments.callee
has been deprecated。无论如何,这里有几种方法可以在Python中做类似的事情,你可能还没有看到过。
使用上下文管理器:
class wrapped(object):
def __init__(self, func):
self.func = func
def __enter__(self):
def wrapper(*args, **kwargs):
return self.func(self.func, *args, **kwargs)
return wrapper
def __exit__(self, *args):
pass
def test(callee, value=None):
if value is None:
print 'function attribute "x" is {}'.format(callee.x)
else:
print 'setting function attribute "x" to {}'.format(value)
callee.x = value
with wrapped(test) as test:
test(42) # -> setting function attribute "x" to 42
test() # -> function attribute "x" is 42
另一种更容易使用的方法是使用函数装饰器:
from functools import wraps
def deco(f):
@wraps(f)
def wrapper(*args, **kwargs):
return f(f, *args, **kwargs)
return wrapper
@deco
def test(callee, value=None):
if value is None:
print 'function attribute "x" is {}'.format(callee.x)
else:
print 'setting function attribute "x" to {}'.format(value)
callee.x = value
test(42) # -> setting function attribute "x" to 42
test() # -> function attribute "x" is 42