解释器中的python装饰器

时间:2014-03-12 19:10:46

标签: python decorator python-decorators

如何在python交互式shell(解释器)中使用此代码:

@makebold
@makeitalic
def hello():
    print ("Hello, world!")
shell中的

我收到此错误:

>>> @makebold
...     hello()
  File "<stdin>", line 2
    hello()
    ^
IndentationError: unexpected indent
>>> @makebold
... hello()
  File "<stdin>", line 2
    hello()
        ^
SyntaxError: invalid syntax
>>>

1 个答案:

答案 0 :(得分:3)

您正在尝试装饰表达式;您忘记使用def,在一种情况下,您甚至缩进 hello()行。 Python文件中的相同代码将失败并出现相同的错误,交互式解释器和Python源文件之间没有区别。

装饰器只适用于类和函数;如果你真的试图将它与函数定义语句一起使用,它可以正常工作:

>>> def foo(f):
...     return f
... 
>>> @foo
... def bar():
...     pass
... 

如果您想将其应用于现有功能,则需要使用:

>>> hello = makebold(hello)

因为这正是@expression语法最终要做的事情。