笨办法学Python第40节,上次用的第三版的书,这次是第四版的书。
这一节的代码如下:
1 cities = {‘CA‘:‘San Francisco‘, ‘MI‘:‘Detroit‘, ‘FL‘:‘Jacksonville‘} 2 3 cities[‘NY‘] = ‘New York‘ 4 cities[‘OR‘] = ‘Portland‘ 5 6 def find_city(themap, state): 7 if state in themap: 8 return themap[state] 9 else: 10 return "Not found." 11 12 # ok pay attention! 13 cities[‘_find‘] = find_city 14 15 while True: 16 print "State?(ENTER to quit)", 17 state = raw_input("> ") 18 if not state: break 这一句是说如果没有输入的话就break,所以想要跳出循环,什么都不输入直接回车就行 19 20 #this line is the most important ever!study! 21 city_found = cities[‘_find‘](cities,state) 22 print city_found
运行结果:
这一节最重要的是两句话:
cities[‘_find‘] = find_city
city_found = cities[‘_find‘](cities,state)
对这两句话的分析在书的下一节,在这里,我先把我的理解写上。
第一句:首先由代码得知,find_city是个函数,那么就是把这个函数放到字典cities中,并且命名为“_find”。
第二句:将cities这个字典中的state所在的值赋给city_found,为什么是state所在的值,因为cities这个字典里是find_city这个函数,而这个函数的作用里的(themap,state)这两个形参就是对应着21行的两个实参(cities,state),而cities就是前面的字典,这个函数就是返回themap[state],也就是cities中的键state对应的元素。
附上书中对第二句的解释:
1. Python 看到 city_found = 于是知道了需要创建一个变量。
2. 然后它读到 cities ,然后知道了它是一个字典
3. 然后看到了 [‘_find‘] , 于是 Python 就从索引找到了字典 cities 中对应的位置,并且获取了该位置的内容。
4. [‘_find‘] 这个位置的内容是我们的函数 find_city ,所以 Python 就知道了这里表示一个函数,于是当它碰到 ( 就开始了函数调用。
5. cities, state 这两个参数将被传递到函数 find_city 中,然后这个函数就被运行了。
6. find_city 接着从 cities 中寻找 states ,并且返回它找到的内容,如果什么都没找到,就返回一个信息说它什么都没找到。
7. Python find_city 接受返回的信息,最后将该信息赋值给一开始的 city_found 这个变量。