2010-12-03 27 views

回答

3

我曾經有一個裝飾器的命令行腳本文件。

的裝飾中使用這樣的:

@command 
def someFunc(): 
    # code goes here 

的裝飾在做這樣的事情:

commands = {} 
def command(func) 
    commands[func.__name__] = func 
    return func 

然後我可以做這樣的事情:

commandName = raw_input() 
commands[commandName](); 

哪會從控制檯讀取一個命令的名稱並調用它 - 如果它之前被標記爲裝飾器(所以沒有危險的電話將可能與input一樣)。

(在我的代碼名稱由命令行參數採取不raw_input。)

這很容易讓我通過提供他們的名字訪問命令。這是其中一個用途 - 一般規則是「當您想將自己的語義添加到函數定義」「的概念中時,它很有用。一般來說,裝飾者也是如此。

(順便說一句,有func.func_name場,這是更正確的超過func.__name__使用,因爲開始__標識符都應該是私人在Python,據我所知 - 只是一個小細節)

+0

太好了,我還是需要充分理解你說的,感謝func.func_name的提示。 – 2010-12-03 23:09:16

1

它可以是非常有用的調試時。在編寫框架(或任何其他非常通用的軟件)時,您可以使用名稱輕鬆進行調試,以瞭解傳遞的內容。