学习Python艰难的方式Ex40

问题描述 投票:0回答:3

我正在从名为“学习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
python python-2.7 dictionary
3个回答
5
投票
  1. 不它不是。
  2. 是的你可以。

作为旁注,Stack Overflow上的许多顶级回答者都不建议使用学习Python的方法 - 相反。作为一个新手,在2017年,您将更好地学习Python 3并使用其他资源。


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

1
投票

你可以这样做,但是第一个'codepiece'例子为字典本身内的find-function存储了一个“functionpointer”,所以你可以使用'_find'的键来使用该函数,并将参数提供给找到的值(FP)这把钥匙。

我不知道这本书,但这可能是出于某种目的,比如f.e.教你字典中的“价值”可以是不同的类型 - 甚至可以作为对象学习函数的介绍以及如何使用它们....

在一个现实世界的例子中我不会这样做,我可能将整个字典包装在一个类中并提供类方法IF(这就是一个很大的if)还有其他问题导致我为这个类包装东西......

总而言之,这是一个非常好的例子(在德国,我们会说“An den Haaren herbeigezogen”大致翻译为“被它拉扯的毛发”(逐字逐句)或“拉出一个......”)

我认为你最好使用python3网站和它的例子来学习 - 有很多东西可以获得 - 并研究文档。

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

© www.soinside.com 2019 - 2024. All rights reserved.