我正在学习python,这本书叫做#34;学习python就是艰难的方式"我在exercise40
中遇到了这段代码cities = {'CA': 'San Francisco', 'MI': 'Detroit', 'FL': 'Jacksonville'}
cities['NY'] = 'New York'
cities['OR'] = 'Portland'
def find_city(themap, state):
if state in themap:
return themap[state]
else:
return "Not found."
# ok pay attention!
cities['_find'] = find_city
while True:
print "State? (ENTER to quit)",
state = raw_input("> ")
if not state: break
# this line is the most important ever! study!
city_found = cities['_find'](cities, state)
print city_found
1.是否有必要添加" find_city"功能到字典?
2.我可以删除"地图"函数中的参数" find_city"?
这是我的新代码,它仍然可以正常运行:
cities = {"CA" : "San Francisco", "MI" : "Detroit", "FL" : "Jacksonville"}
cities["NY"]= "New York"
cities["OR"] = "Portland"
def find_city(state):
if state in cities:
return cities[state]
else:
return "Not Found."
while True:
print "State? (ENTER to quit)",
state = raw_input(">")
if not state:
break
city_found = find_city(state)
print city_found
答案 0 :(得分:5)
不,不是。
是的,你可以。
作为旁注,Stack Overflow上的许多顶级python回答者不建议使用学习Python的方法 - 相反。作为一个新手,在2017年,您将更好地花时间学习Python 3并使用其他资源。
答案 1 :(得分:3)
是的,将函数放入带有城市的字典中是很奇怪的。我不会这样做,但我不知道,作者想要证明什么。
依靠cities
中的全局变量find_city
并不是一个好主意。
通常,您会使用.get
:
def find_city(mapping, state):
return mapping.get(state, "Not Found.")
while True:
print "State? (ENTER to quit)",
state = raw_input(">")
if not state:
break
city_found = find_city(cities, state)
print city_found
答案 2 :(得分:1)
你可以这样做,但第一个代码是'示例存储"功能指针"对于字典本身内的find-function,您可以使用'_find'
的键来使用该函数,并将参数提供给此键的找到值(FP)。
我不知道这本书,但可能这是出于某种目的,比如f.e.告诉你"价值观"在字典中可以有不同的类型 - 甚至可以将学习函数作为对象的介绍以及如何使用它们....
在一个现实世界的例子中,我不会这样做,我可能将整个字典包装在一个类中并提供类方法 IF (这就是一个很大的if)还有其他问题导致我包装这个类的东西......
总而言之,这是一个非常传统的例子(在德国,我们会说" An den Haaren herbeigezogen"大致翻译为"被它拉上"(字;通过单词)或"拉出a ...")
我认为您最好使用python3网站及其示例来学习 - 有很多东西可以获得 - 并研究文档。