2013-03-12 246 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

相关问题