需要理解这个python代码吗

需要理解这个python代码吗,python,Python,在理解下面代码中的两个方面存在问题。 问题1:我不明白地图是什么,它的用途是什么。 通常,当我们创建具有两个参数的函数时,如下所示: def find_citythemap,state:我们不应该输入这两个参数的值吗 运行程序时的地图和状态?然而,我们只给出国家的价值观 i、 e我们输入CA、MI或FL。我不明白这张地图是用来干什么的 问题2:我不懂线城市 我在谷歌上搜索了“_find”python,唯一找到的是zed shaw的书。它属于哪一类,或者我应该阅读什么来了解更多关于这一行的信息 c

在理解下面代码中的两个方面存在问题。 问题1:我不明白地图是什么,它的用途是什么。 通常,当我们创建具有两个参数的函数时,如下所示:

def find_citythemap,state:我们不应该输入这两个参数的值吗 运行程序时的地图和状态?然而,我们只给出国家的价值观 i、 e我们输入CA、MI或FL。我不明白这张地图是用来干什么的

问题2:我不懂线城市 我在谷歌上搜索了“_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主题吗。我的意思是,为了更好地理解我提出的问题。

地图不是地理意义上的城市地图。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*>}