需要理解这个python代码吗
在理解下面代码中的两个方面存在问题。 问题1:我不明白地图是什么,它的用途是什么。 通常,当我们创建具有两个参数的函数时,如下所示: def find_citythemap,state:我们不应该输入这两个参数的值吗 运行程序时的地图和状态?然而,我们只给出国家的价值观 i、 e我们输入CA、MI或FL。我不明白这张地图是用来干什么的 问题2:我不懂线城市 我在谷歌上搜索了“_find”python,唯一找到的是zed shaw的书。它属于哪一类,或者我应该阅读什么来了解更多关于这一行的信息需要理解这个python代码吗,python,Python,在理解下面代码中的两个方面存在问题。 问题1:我不明白地图是什么,它的用途是什么。 通常,当我们创建具有两个参数的函数时,如下所示: def find_citythemap,state:我们不应该输入这两个参数的值吗 运行程序时的地图和状态?然而,我们只给出国家的价值观 i、 e我们输入CA、MI或FL。我不明白这张地图是用来干什么的 问题2:我不懂线城市 我在谷歌上搜索了“_find”python,唯一找到的是zed shaw的书。它属于哪一类,或者我应该阅读什么来了解更多关于这一行的信息 c
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主题吗。我的意思是,为了更好地理解我提出的问题。地图不是地理意义上的城市地图。Python映射是一种数据类型。很明显,函数传递的是一个包含城市的容器,在函数中,它传递的是一个要在容器中查找的城市。在函数的上下文中,您可能真的是新手,参数具有不同的名称,但在函数的顶部具有相同的值 在python中,任何东西都有一个可以赋值的值,甚至是函数。您要问的问题2只是同一函数的一个新名称 这条线
city_found = cities['_find'](cities, state)
正在呼叫
def find_city(themap, state):
所以
themap ==> cities
state ==> state
当呼叫查找城市时,请注意之前分配的城市[''查找']=查找城市 您正在发送 字典城市与国家。城市标识 重新映射重命名如果要在函数中映射,则此部分代码中的状态保持不变:
def find_city(themap, state)
也就是说,在主程序中,您将字典称为cities,但当您调用函数时,函数将其称为themap。国家保持不变。调用中的标识符和函数头中列出的标识符之间的位置匹配名称
cities[\u find]允许您使用
“查找城市”功能中的状态
阅读更多关于函数和参数传递机制、Python中变量和字典的函数赋值的信息,将有助于巩固您对此类代码构造的理解。希望这有帮助
是的,你是对的-find_city接受两个参数,即调用时给定的数量,即
城市,州
这仅仅意味着一个条目被添加到城市地图中。条目的键是字符串_find,值是finction find_city。
这就是为什么表达式cities[''u find']返回函数,然后用两个参数调用它
嗯,themap是一个所谓的map、dictionary或基于散列的容器。它就像数组一样使用,因为运算符[]被超载,不知何故,我来自C++背景,它在C++中是可行的。将“纽约”指定给城市['NY']时,会自动创建键“NY”,对应于该键的值为“纽约”
要回答第二个问题,find_city是某种类型的函数指针,它与键“\u find”配对。在这里,您可以任意选择键。你可以用find或find或任何你想要的东西。难怪你在谷歌上找不到任何关于它的信息。行cities[''u find']cities,state实际上在内部被转换为查找citycities,state
希望我帮了点忙,:
def find_citythemap,state:我们运行程序时是否应该输入map和state这两个参数的值
没有;调用函数时,应该向函数传递两个参数
并非程序使用的所有数据都必须来自用户。它可以提供自己的数据,从文件中读取内容,等等
我不懂线城市
城市是一本字典。因此cities[]=使用键将值放入字典中。这里我们的键是字符串“\u find”,值是函数find\u city。是的,在Python中,一切都是一个对象,其中包括函数。因此,我们当然可以将函数存储在容器中:
city_found = cities['_find'](cities, state)
在这里,我们评估城市[''u find']-即,我们在字典cities中查找键''u find',找到函数find_city;然后我们将结果用于城市,州。因此,这就像我们写了《城市,州》一样;这是一个正常的函数调用。state是用户输入的值,作为state传递;城市是字典,它被作为地图传递。在函数内部,在cities字典中查找命名状态
city_found = cities['_find'](cities, state)
这里您使用了一个调用函数,它调用预定义的函数DEF--
它将城市称为“themap”
“国家”代表国家
但仍然存在的问题是,为什么要使用“u”符号
在“查找”之前。。。
谢谢。函数是可以传递的值 说城市[''u find']等同于说查找城市,因为它们都评估该函数。 fn=城市[''u find'] 城市、州
在python中,应用于值的函数调用语法尝试使用参数调用该值(若该值是可调用的)。因此,在您的例子中,cities[''u find'].\u call\u cities,state最终被执行。您只需查看代码中的两行: 城市[''u find']=查找城市 城市,州 解释1: 在你使用城市之前,城市就是字典。 打印它
print(cities)
Output: {'CA': 'San Francisco', 'MI': 'Detroit', 'FL': 'Jacksonville', 'NY': 'New York', 'OR': 'Portland'}
现在在使用城市[''u find']=查找城市之后
在这里,最后一个字典项添加了键_find,其值是函数find_city
说明2:
现在city_found=城市,州
现在我们知道find_city在find的目录中,这意味着我们可以使用它。可以将其分解如下:
Python看到city_found=并知道我们想要创建一个新变量
然后它读取城市并找到那个变量,它是一个dict
然后还有[''u find'],它将索引到cities dict中,并从中提取出任何可以找到的内容
[''u find']是我们的函数find_city,这样Python就知道它有一个函数,并进行函数调用
参数cities,state传递给这个函数find_city,它运行是因为调用了它
find_city然后尝试查找城市内的状态,并返回所找到的内容
Python获取find_city返回的内容,最后是分配给city_found的内容
cities['''''']=find_city是引用find_city函数的方法,因此这个字典元素是一个函数,调用它只是引用元素,然后添加参数:cities[''''find']cities,state,这只是调用find_city函数的另一种方法。问题1:map的值来自函数调用:city_find=cities[''find']cities,状态,即dictionary cities作为find_city方法的第一个参数传递并复制到地图中,因此无需从用户处获取地图。问题2:“\u find”此处不是关键字,仅用作dict对象的索引值。。。它可能是任何东西,例如“查找”、“搜索”、“定位”等。城市是个糟糕的主意。现在,如果有人试图找到一个名为_find的城市,他们将返回一个函数,而不是消息notfound;该功能是内置的。但是,在Python中,你可以通过使用下标C++来C++调用操作符[C],通过提供一个类的魔法γGETIEM和/或GETSLICEXY方法来实现。谢谢你告诉我。嗯,好吧,那为什么它写得像城市而不是城市,州?写得像城市一样有什么好处?@faraz问得好,我也不确定我在这方面有什么好处,事实上,这似乎只是不必要地混淆了代码。或者有人能想出一个很好的理由在这里这样做吗?你能告诉我,为了更好地理解我所谈论的这些问题,我应该阅读python的哪个主题吗?@faraz我可能会花一些时间阅读函数调用过程,即参数/参数是如何映射的,然后查找并阅读函数的相关内容变量赋值-希望这能帮助你开始。@faraz实际上,我写了一些非常类似的东西。关于这一点,我在下面的回答中添加了更多的解释。阅读函数和参数也有助于澄清这一点。好问题。我对此也很好奇。我在阅读python标识符时发现这是一个python标识符。标识符以字母a到Z或a到Z或下划线开头,后跟零个或多个字母、下划线和数字0到9。这应该说明问题。
print(cities)
Output: {'CA': 'San Francisco', 'MI': 'Detroit', 'FL': 'Jacksonville', 'NY': 'New York', 'OR': 'Portland'}
print(cities)
Output: {'CA': 'San Francisco', 'MI': 'Detroit', 'FL': 'Jacksonville', 'NY': 'New York', 'OR': 'Portland', *'_find': <function find_city at 0x01BAB738*>}