2011-08-16 35 views

回答

4

在Python參考文檔,Compound Statements部分,它說:

decorated  ::= decorators (classdef | funcdef) 
decorators  ::= decorator+ 
decorator  ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE 
funcdef  ::= "def" funcname "(" [parameter_list] ")" ":" suite 

這是語法規則的一部分。正如你所看到的,修飾器只應用於功能或類定義之前,這是def <funcname>開始的地方。它繼續,注意:

函數定義可能被一個或多個修飾器 表達式包裝。在包含函數定義的範圍中定義函數 時評估裝飾器表達式。

也就是說,記住,裝修其實只是語法糖,以前他們提供形式:

func = decorate_func(func) 

代替。因此,如果你所擁有的只是某個變量中的函數對象,則不能使用裝飾器語法糖,並且必須恢復到第二種方法。

7

@語法僅前允許立即允許。defclass

+2

換句話說,你只能使用第二種形式。 – Keith

相關問題