1

我有一个 if 语句,它检查来自另一个模块的字典,以查看它是否包含恰好具有函数作为其值的关键字。该函数从未被显式调用,但它在程序启动时执行,甚至在其他任何事情发生之前。这不是期望的行为,该函数永远不应该被实际调用。如果关键字在字典中,那么应该发生的只是程序向终端打印“good”。难道我做错了什么?我已经在网上搜索了几个小时,我的大脑很痛:(

从'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'不应该在那里,因为该函数实际上从未被调用......对吗?我想不通

4

1 回答 1

2

您将调用返回的值存储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

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

于 2013-03-12T05:34:32.720 回答