python下划线:学习python艰苦的方式练习40

时间:2012-05-23 09:17:00

标签: python python-2.7

Iam尝试在“学习Python的困难”页面中进行练习: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)的作用(?)

如果有人能解释我上述两行,我真的很感激。谢谢你的时间。

3 个答案:

答案 0 :(得分:8)

此代码:

cities['_find'] = find_city

只需使用键find_city将函数cities插入_find字典即可。下划线没有特别的意义,它只是关键字符串的一部分。可能选择不与实际城市名称发生碰撞。

此代码:

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

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

可以改写为:

city_found = find_city(cities, state)

这样做似乎没有任何真正的,这样做没有任何好处(这被称为"地图&# 34;在代码中)包含find函数,我可以看到。

答案 1 :(得分:3)

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

foo(a,b)使用参数fooa调用b中存储的函数。 cities['_find'](cities, state) 完全相同

至于下划线,它只是存在,所以它不会与一个名为" find"的城市发生冲突,如果有的话。整个例子是高度设计的,但重点似乎是教你功能只是对象。

答案 2 :(得分:1)

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

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