python:从另一个模块中的字典调用函数

时间:2013-03-12 05:32:14

标签: dictionary python-2.7 module

我有一个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'不应该存在,因为函数实际上从未被调用过......对吗?我无法弄明白

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

这会存储函数对象,而不会调用它。