在下面的代码中理解2件事时遇到问题。 问题1:我不明白图是什么,它的用途是什么。 通常当我们使用2个参数创建函数时,如:
def find_city(themap,state):
我们不应该输入2个参数的值
我们运行程序时themap
和state
?然而,我们只给出了国家的价值观
即我们输入CA或MI或FL。我不明白使用themap
是什么。
问题2:我不明白行cities['_find'] = find_city
我搜索了谷歌'_find' python
,我发现的唯一一件事是参考zed shaw的书。它属于哪个类别,或者我应该阅读哪些内容以了解有关此行的更多信息?
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
编辑:你能告诉我我应该学习哪一章或python主题,以便更好地理解这一点。我的意思是,要更好地理解我提出的问题。
答案 0 :(得分:5)
这一行
city_found = cities['_find'](cities, state)
正在调用
def find_city(themap, state):
因此
themap ==> cities
state ==> state
答案 1 :(得分:2)
当致电find_city
时(请注意先前的cities['_find'] = find_city
分配)
city_found = cities['_find'](cities, state)
你发送的是
字典cities
以及state
。标识符cities
重新映射(如果你愿意,重命名)到函数中的themap
,state
在代码的这一部分保持不变:
def find_city(themap, state)
即,在您的“主程序”中,您将字典称为cities
,但是当您调用该函数时,该函数将其称为themap
。 state
保持不变。名称由呼叫中的标识符与函数头中列出的名称之间的位置匹配。
cities[_find]
允许您使用索引编入cities
字典
state
函数中的find_city
。
阅读更多关于函数和参数传递机制,Python中的函数赋值(到变量)和字典应该有助于巩固你对这类代码结构的理解。希望这会有所帮助。
答案 2 :(得分:2)
def find_city(themap,state):当我们运行程序时,我们不应该输入2个参数的值吗?
没有;当我们调用函数时,我们应该传递函数的两个参数。
并非程序使用的每个数据都必须来自用户。它可以提供自己的数据,从文件中读取内容等。
我不明白线路城市['_ find'] = find_city
cities
是一本字典。因此,cities[<anything in here>] = <anything over there>
会将<anything over there>
值放入带有密钥<anything over here>
的字典中。这里我们的键是字符串'_find'
,值是函数find_city
。是的,在Python中,一切都是对象,包括函数。所以我们当然可以将函数存储在容器中:)
city_found = cities['_find'](cities, state)
在此,我们评估cities['_find']
- 即,我们在字典'_find'
中查找键cities
,找到函数find_city
;然后我们将结果与(cities, state)
一起使用。因此,就像我们写过find_city(cities, state)
一样;这是一个正常的函数调用。 state
是用户输入的值,以state
传递; cities
是字典,以themap
传递。在函数内部,在cities
字典中查找命名状态。
答案 3 :(得分:2)
city_found = cities['_find'](cities, state)
这里你使用了一个调用函数,它调用预定义的函数DEF ---
它称为城市的'themap'
和'州'为州
但问题仍然存在,为什么在'找'之前使用'_'符号... 谢谢。
答案 4 :(得分:0)
地图不是地理意义上的城市地图意义上的地图。 Python地图是一种数据类型。很明显,该功能正在通过一个带有城市的容器,并且在该功能中它正在通过一个城市在容器内查找。也许你真的是新手 - 在函数的上下文中,参数采用不同的名称,但在函数的顶部具有相同的值。
在python中,一切都有一个可以分配的值,甚至是函数。您要问的问题2只是同一功能的新名称。
答案 5 :(得分:0)
是的你是对的 - find_city接受两个参数,并且在调用它时会给出多少个参数,即
cities ['_ find'](城市,州)
这只是意味着一个条目被添加到城市地图中。条目的键是字符串“_find”,值是finction find_city。 这就是为什么表达式cities ['_ find']返回函数然后用两个参数调用它。
答案 6 :(得分:0)
嗯,themap
是所谓的地图或字典或基于散列的容器。它像数组一样使用,因为operator[]
以某种方式重载(我来自C ++背景,它在C ++中是可行的)。当您将'New York'
分配给cities['NY']
密钥&#39; NY&#39;是自动创建的,与该键对应的值是“纽约”。
要回答第二个问题,find_city
是某种函数指针,它与键'_find'
配对。这里_find
是密钥的任意选择。您可以使用find
或Find
或其他任何您想要的内容。难怪你在Google上没有找到任何关于它的信息。行cities['_find'](cities, state)
实际上在内部被转换为find_city(cities, state)
。
希望我有所帮助,:)。
答案 7 :(得分:0)
函数是可以传递的值。
说cities['_find']
等同于说find_city
,因为它们都评估为该函数。
fn = cities ['_ find']
fn(城市,州)
在python中,应用于值的函数调用语法尝试使用参数调用该值(如果它是可调用的)。因此,在您的情况下,cities['_find'].__call__(cities, state)
最终会被执行。
答案 8 :(得分:-1)
您只需查看代码中的两行:
cities['_find'] = find_city
city_found = cities['find'](cities, state)
在使用cities['_find']
之前,城市是字典。
打印它......
print(cities)
Output: {'CA': 'San Francisco', 'MI': 'Detroit', 'FL': 'Jacksonville', 'NY': 'New York', 'OR': 'Portland'}
现在使用cities['_find']=find_city
后,
print(cities)
Output: {'CA': 'San Francisco', 'MI': 'Detroit', 'FL': 'Jacksonville', 'NY': 'New York', 'OR': 'Portland', *'_find': <function find_city at 0x01BAB738*>}
此处最后一个词典项目添加了键_find
,值为find_city
。
现在city_found = cities['find'](cities, state)
现在我们知道find_city位于_find
的dict中,这意味着我们可以使用它。它可以像这样分解:
Python看到city_found =
并且知道我们想要创建一个新变量。
然后它会读取城市并找到该变量,这是一个字典。
然后会有['_find']
索引到城市字典并提取_find
处的内容。
['_find']
的内容是我们的函数find_city
,因此Python知道它有一个函数,它执行函数调用。
参数cities,state被传递给此函数find_city
,并且因为它被调用而运行。
find_city
然后尝试查找城市内的州,并返回找到的内容。
Python接受find_city
返回的内容,最后分配给city_found
。