我有一个if语句,它检查来自另一个模块的字典,看它是否包含碰巧有一个函数作为其值的关键字。该函数从未被显式调用,但它在程序启动之前执行,甚至在其他任何事情发生之前。这不是理想的行为,实际上永远不应该调用该函数。如果关键字在字典中,那么所有应该发生的是程序向终端打印“好”。难道我做错了什么?我已经在互联网上搜了好几个小时,我的脑子疼了:(
来自'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'不应该存在,因为函数实际上从未被调用过......对吗?我无法弄明白
答案 0 :(得分:2)
您将在{d}中调用one
时返回的值存储起来。由于你的dict是全局的,它在导入时获得它的价值。即你的代码相当于:
x = one() # call the function
command_list = {'one' : x} # store result in a dict
尝试:
command_list = {'one' : one} # store the function in a dict
这会存储函数对象,而不会调用它。