2013-03-12 107 views
1

我有一個if語句來檢查來自另一個模塊的字典,看它是否包含碰巧有一個函數作爲其值的關鍵字。該函數從未明確調用過,但是在程序啓動之前執行,甚至發生任何事情。這不是所希望的行爲,應該永遠不會調用該函數。如果關鍵字在字典中,所有應該發生的事情是程序向終端打印「良好」。難道我做錯了什麼?我已經沖刷了好幾個小時在網上和我的腦袋疼:(python:從另一個模塊中的字典中調用函數

從 'source.py':

import commands 
game_state = 'playing' 

while game_state == 'playing': 
    player_input = raw_input('>>') 
    if player_input == 'quit': 
     break 
    elif player_input in commands.command_list: 
     print 'good' 

而且從 'commands.py':

def one(): 
    print '1' 
command_list = {'one' : one()} 

最後,這裏是輸入函數名稱後得到的終端:

1 
>>one 
good 
>>_ 

'1'在最開始的時候不應該在那裏,因爲這個功能從來沒有被實際調用......對嗎?我無法弄清楚這個

回答

2

你存儲在你的字典中調用one返回的值。由於您的字典是全球性的,因此它在進口時獲得價值。即你的代碼就相當於:

x = one() # call the function 
command_list = {'one' : x} # store result in a dict 

嘗試:

command_list = {'one' : one} # store the function in a dict 

此存儲函數對象,而不調用它。

+0

哦好吧很酷。非常感謝,這讓O_O非常沮喪 – pulsefrequency 2013-03-12 05:49:29

相關問題