Посмотрим.
сам по себе find_city имеет смысл:
def find_city(themap, state):
if state in themap:
return themap[state]
else:
return "Not found."
Так что я не уверен, что насчет заявления if, которое вы находите запутанным. Если состояние является ключом в карте, оно возвращает соответствующее значение; если нет («else»), возвращается строка «Not found». вместо этого.
cities['_find'] = find_city
Что делает эта строчка, так это забавная часть Словари не должны хранить только один тип объекта в качестве значения (или ключ в этом отношении, хотя ключи имеют более строгие требования - в реальном словаре не имеет значения, есть ли у вас предложение или картинка рядом с словом, но сложно что-то найти, если ключевые слова меняются). Здесь мы храним саму функцию в словаре, которая будет вызвана позже.
Начальное подчеркивание префикса - просто подсказка читателю, что означает «это внутреннее». Python на самом деле не имеет закрытых переменных, как некоторые другие языки, но мы иногда следуем соглашению, что, когда что-то внутреннее или немного особенное, мы используем одно подчеркивание.
Что касается определения состояния, то здесь это происходит:
state = raw_input("> ")
, что означает «читать вводимые пользователем строки и помечать их именем переменной« состояние »». Обратите внимание, что хотя это и называется состоянием, а второй аргумент find_city называется состоянием, это разные вещи.
Наконец,
`city_found=cities['_find'](cities,state)` seems to be the equivalent of `city_found=find_city(cities,state)`.
Да! У вас это точно, потому что city ['_ find'] возвращает функцию find_city. Это немного странно - большинство людей используют класс вместо словаря, в котором смешаны функции и данные - но это работает.