需要了解这个python代码

时间:2012-04-30 06:07:14

标签: python

在下面的代码中理解2件事时遇到问题。 问题1:我不明白图是什么,它的用途是什么。 通常当我们使用2个参数创建函数时,如:

def find_city(themap,state):我们不应该输入2个参数的值 我们运行程序时themapstate?然而,我们只给出了国家的价值观 即我们输入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主题,以便更好地理解这一点。我的意思是,要更好地理解我提出的问题。

9 个答案:

答案 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 重新映射(如果你愿意,重命名)到函数中的themapstate在代码的这一部分保持不变:

def find_city(themap, state)

即,在您的“主程序”中,您将字典称为cities,但是当您调用该函数时,该函数将其称为themapstate保持不变。名称由呼叫中的标识符与函数头中列出的名称之间的位置匹配。

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)

  1. 是的你是对的 - find_city接受两个参数,并且在调用它时会给出多少个参数,即

    cities ['_ find'](城市,州)

  2. 这只是意味着一个条目被添加到城市地图中。条目的键是字符串“_find”,值是finction find_city。 这就是为什么表达式cities ['_ find']返回函数然后用两个参数调用它。

答案 6 :(得分:0)

嗯,themap是所谓的地图或字典或基于散列的容器。它像数组一样使用,因为operator[]以某种方式重载(我来自C ++背景,它在C ++中是可行的)。当您将'New York'分配给cities['NY']密钥&#39; NY&#39;是自动创建的,与该键对应的值是“纽约”。

要回答第二个问题,find_city是某种函数指针,它与键'_find'配对。这里_find是密钥的任意选择。您可以使用findFind或其他任何您想要的内容。难怪你在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)

您只需查看代码中的两行:

  1. cities['_find'] = find_city

  2. city_found = cities['find'](cities, state)

  3. (1)的解释:

    在使用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

    (2)的解释:

    现在city_found = cities['find'](cities, state)

    现在我们知道find_city位于_find的dict中,这意味着我们可以使用它。它可以像这样分解:

    1. Python看到city_found =并且知道我们想要创建一个新变量。

    2. 然后它会读取城市并找到该变量,这是一个字典。

    3. 然后会有['_find']索引到城市字典并提取_find处的内容。

    4. ['_find']的内容是我们的函数find_city,因此Python知道它有一个函数,它执行函数调用。

    5. 参数cities,state被传递给此函数find_city,并且因为它被调用而运行。

    6. find_city然后尝试查找城市内的州,并返回找到的内容。

    7. Python接受find_city返回的内容,最后分配给city_found