【问题标题】:python underscores: learn python the hard way exercise 40python下划线:学习python的艰辛练习40
【发布时间】:2012-05-23 09:16:59
【问题描述】:

我正在尝试做“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)做了什么(?)

如果有人能向我解释上述两行,我将不胜感激。感谢您的宝贵时间。

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    这段代码:

    cities['_find'] = find_city
    

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

    这段代码:

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

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

    可以改写为:

    city_found = find_city(cities, state)
    

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

    【讨论】:

      【解决方案2】:

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

      foo(a,b) 使用参数ab 调用存储在foo 中的函数。 cities['_find'](cities, state) 做了完全相同的事情

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-05-16
          • 2012-12-24
          • 2015-04-23
          • 2015-05-01
          • 2013-04-06
          • 2011-12-04
          • 2016-06-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多