2013-03-12 4 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 в вашем dict. Поскольку ваш dict глобальный, он получает свою ценность во время импорта. То есть Ваш код эквивалентен:

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

Try:

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

Это сохраняет объект функции, не называя его.

+0

О, хорошо, круто. Большое спасибо, это было довольно неприятно O_O – pulsefrequency

Смежные вопросы