如何在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
>>>
答案 0 :(得分:3)
您正在尝试装饰表达式;您忘记使用def
,在一种情况下,您甚至缩进 hello()
行。 Python文件中的相同代码将失败并出现相同的错误,交互式解释器和Python源文件之间没有区别。
装饰器只适用于类和函数;如果你真的试图将它与函数定义语句一起使用,它可以正常工作:
>>> def foo(f):
... return f
...
>>> @foo
... def bar():
... pass
...
如果您想将其应用于现有功能,则需要使用:
>>> hello = makebold(hello)
因为这正是@expression
语法最终要做的事情。