0
说我有一个装饰工厂工厂。这是很没用,只是积累的论点,并增加了结果,但只是一个例子:为什么使用装饰工厂的工厂函数出现语法错误?
def decorator_factory_factory(a):
def decorator_factory(b):
def decorator(f):
def decorated(*args, **kwargs):
return f(*args, **kwargs) + a + b
return decorated
return decorator
return decorator_factory
我尝试使用这样的:
@decorator_factory_factory(3)(1)
def should_return_5():
return 1
我得到一个SyntaxError。当然,它应该允许任何Python表达式作为装饰器?
我也试过:
@(decorator_factory_factory(3)(1))
def should_not_be_touched():
return 1
但这是另一个的SyntaxError。
我做错了什么?我围绕着这一发现的唯一的方法是:
_decorator_factory = decorator_factory_factory(3)
@_decorator_factory(1)
def should_not_be_touched():
return 1
del _decorator_factory
但这需要需要删除
什么版本的一个额外的变量你在使用Python,@Artyer? –
@ChristianDean适用于Windows上的3.6.1和2.7.13,以及Ubuntu上的默认python2和3。 – Artyer
@过于有趣。我问,因为显然[本](http://concisionandconcinnity.blogspot.com/2010/09/decorator-factories-and-decorator.html)文章的作者可以使用装饰工厂的工厂语法。我认为他可能一直在Python 2.7中使用语法,但是在那个版本上失败了。我将使用Python v2.6来检查。 –