学习Python艰难的方式Ex40
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习Python艰难的方式Ex40相关的知识,希望对你有一定的参考价值。
我正在从名为“学习python艰难的方式”的书中学习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”中的“themap”参数吗?
这是我的新代码,它仍然可以运行,没有任何错误:
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
- 不它不是。
- 是的你可以。
作为旁注,Stack Overflow上的许多顶级python回答者都不建议使用学习Python的方法 - 相反。作为一个新手,在2017年,您将更好地学习Python 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
你可以这样做,但是第一个'codepiece'例子为字典本身内的find-function存储了一个“functionpointer”,所以你可以使用'_find'
的键来使用该函数,并将参数提供给找到的值(FP)这把钥匙。
我不知道这本书,但这可能是出于某种目的,比如f.e.教你字典中的“价值”可以是不同的类型 - 甚至可以作为对象学习函数的介绍以及如何使用它们....
在一个现实世界的例子中我不会这样做,我可能将整个字典包装在一个类中并提供类方法IF(这就是一个很大的if)还有其他问题导致我为这个类包装东西......
总而言之,这是一个非常好的例子(在德国,我们会说“An den Haaren herbeigezogen”大致翻译为“被它拉扯的毛发”(逐字逐句)或“拉出一个......”)
我认为你最好使用python3网站和它的例子来学习 - 有很多东西可以获得 - 并研究文档。
从这里开始:https://docs.python.org/3/tutorial/
以上是关于学习Python艰难的方式Ex40的主要内容,如果未能解决你的问题,请参考以下文章