2

我正在尝试做“Learn Python the hard way”一书中的练习页面:106。示例如下:

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

我不明白是什么cities['_find'] = find_city?是什么_find?特别是为什么下划线?同样,我不确定是什么city_found = cities['_find'](cities, state)。我在同一个问题上看到过类似的帖子: learn python the hard way exercise 40 help

这基本上说cities['_find'] = find_city将函数 find_city 添加到字典中,但我仍然不明白是什么city_found = cities['_find'](cities, state)(?)

如果有人可以向我解释上述两行,我将不胜感激。谢谢你的时间。

4

3 回答 3

8

这段代码:

cities['_find'] = find_city

只需使用 key 将函数find_city插入cities字典_find。下划线没有特殊含义,它只是键字符串的一部分。可能选择不与实际城市名称冲突。

这段代码:

city_found = cities['_find'](cities, state)

调用该函数,首先使用键find_city在字典中查找它。_find

它可以重写为:

city_found = find_city(cities, state)

这样做似乎没有任何实际意义,让字典(在代码中称为“地图”)包含find我可以看到的函数没有任何好处。

于 2012-05-23T09:19:32.590 回答
3

正如你所说,cities['_find'] = find_city将函数添加到字典中。因此,cities['_find']从字典中检索它。

foo(a,b)foo使用参数调用存储的函数abcities['_find'](cities, state)同样的事情

至于下划线,它只是在那里,这样它就不会与一个名为“find”的城市发生冲突,如果有的话。整个示例非常做作,但重点似乎是要告诉您函数只是对象。

于 2012-05-23T09:20:50.567 回答
1

cities['_find'] = find_city将函数添加到字典中。city_found = cities['_find'](cities, state)调用该函数(因为函数find_city需要的 parenteses 和两个 args。

下划线并没有真正改变任何东西,它是键的一部分。通常,您使用下划线作为前缀来表达某些内容,例如将其标记为内部或其他内容。这本书应该在某处说明它的含义。

于 2012-05-23T09:20:45.117 回答