Python 将这种数据类型叫做 “dict”,有的语言里它的名称是 “hash”。这两种名字都会用到,不过这并不重要,重要的是它们和列表的区别。你看,针对列表你可以做这样的事情:
你可以使用数字作为列表的索引,也就是你可以通过数字找到列表中的元素。而 dict 所作的,是让你可以通过任何东西找到元素,不只是数字。是的,字典可以将一个物件和另外一个东西关联,不管它们的类型是什么,我们来看看:
你将看到除了通过数字以外,我们还可以用字符串来从字典中获取 stuff ,我们还可以用字符串来往字典中添加元素。当然它支持的不只有字符串,我们还可以做这样的事情:
在这里我使用了两个数字。其实我可以使用任何东西,不过这么说并不准确,不过你先这么理解就行了。
当然了,一个只能放东西进去的字典是没啥意思的,所以我们还要有删除物件的方法,也就是使用 del 这个关键字:
这里是我们要讨论的代码:
你要记住一个函数也可以作为一个变量,``def find_city`` 比如这一句创建了一个你可以在任何地方都能使用的变量。在这段代码里,我们首先把函数 find_city 放到叫做 cities 的字典中,并将其标记为 '_find'。 这和我们将州和市关联起来的代码做的事情一样,只不过我们在这里放了一个函数的名称。
好了,所以一旦我们知道 find_city 是在字典中 _find 的位置,这就意味着我们可以去调用它。第二行代码可以分解成如下步骤:
- Python 看到 city_found = 于是知道了需要创建一个变量。
- 然后它读到 cities ,然后知道了它是一个字典
- 然后看到了 ['_find'] ,于是 Python 就从索引找到了字典 cities 中对应的位置,并且获取了该位置的内容。
- ['_find'] 这个位置的内容是我们的函数 find_city ,所以 Python 就知道了这里表示一个函数,于是当它碰到 ( 就开始了函数调用。
- cities, state 这两个参数将被传递到函数 find_city 中,然后这个函数就被运行了。
- find_city 接着从 cities 中寻找 states ,并且返回它找到的内容,如果什么都没找到,就返回一个信息说它什么都没找到。
- Python find_city 接受返回的信息,最后将该信息赋值给一开始的 city_found 这个变量。
我再教你一个小技巧。如果你倒着阅读的话,代码可能会变得更容易理解。让我们来试一下,一样是那行:
- state 和 city 是...
- 作为参数传递给...
- 一个函数,位置在...
- '_find' 然后寻找,目的地为...
- cities 这个位置...
- 最后赋值给 city_found.
还有一种方法读它,这回是“由里向外”。
- 找到表达式的中心位置,此次为 ['_find'].
- 逆时针追溯,首先看到的是一个叫 cities 的字典,这样就知道了 cities 中的 _find 元素。
- 上一步得到一个函数。继续逆时针寻找,看到的是参数。
- 参数传递给函数后,函数会返回一个值。然后再逆时针寻找。
- 最后,我们到了 city_found = 的赋值位置,并且得到了最终结果。