学习Python艰难的方式Ex40

时间:2017-12-31 15:01:01

标签: python python-2.7 dictionary

我正在学习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

3 个答案:

答案 0 :(得分:5)

  1. 不,不是。

  2. 是的,你可以。

  3. 作为旁注,Stack Overflow上的许多顶级回答者不建议使用学习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网站及其示例来学习 - 有很多东西可以获得 - 并研究文档。

从这里开始:https://docs.python.org/3/tutorial/