优先级的层次结构(如果for循环中的语句)

问题描述:

我目前正在使用Coursera提供的Python数据库课程。该课程的链接可以在这里找到: https://www.coursera.org/learn/python-databases优先级的层次结构(如果for循环中的语句)

我没有要求任何人做功课,只是为了澄清关于Python 2如何读取for循环和优先if语句。您可以下载相应的代码和XML文件,我在这里解析:该程序是为了做 http://www.pythonlearn.com/code/tracks.zip

一切都是这个问题的范围之内。在tracks.py程序内部,我遇到了一个辅助函数,用于提取Library.xml文件中声明的字典中的键的值。它看起来像这样:

def lookup(d, key): 
    found = False 
    for child in d: 
     if found : return child.text 
     if child.tag == 'key' and child.text == key : found = True 
    return None 

乍一看,它没有任何意义,我的功能是如何检查found布尔和给定键以前返回值来检查,如果它在那里第一个地方。当我尝试切换两个语句时,程序没有正确读取数据。 这是为什么?

如果有人希望我发布我如何测试和发现为什么这不起作用,请让我知道,我会添加一些输出。

+3

Python的评估报告从上到下,因为大多数语言做。我的猜测只是该函数应该在'key'之后返回_next_元素。 –

+0

是的,这是有道理的。谢谢老板。 – ASwiftPeregrine

与大多数语言一样,Python会自上而下评估语句。我的猜测是,该函数应该返回下一个元素后,与给定的key

Library.xml看起来<dict>内容是这样的:

<dict> 
    <key>Major Version</key><integer>1</integer> 
    <key>Minor Version</key><integer>1</integer> 
    <key>Date</key><date>2015-11-24T11:12:10Z</date> 
    ... 

这些都不是真正在Python义字典,而是包含列表交替<key><integer/string/date/whatever>元素只是一个元素<dict> ,后者是前面的键的值。因此,如果您正在查找给定键的值,则重复列表d,直到找到key,然后返回下一个childtext

假设这些<dict>元素总是良好的,你也可以使用这样的:

def lookup(d, key): 
    it = iter(d) 
    for child in it: 
     if child.tag == 'key' and child.text == key : 
      return next(it).text 
    return None 
+0

谢谢。我现在明白好多了。它甚至对我在切换语句后如何测试函数是有意义的,因为它只是打印我正在查找的“key”(child.tag)的“value”(child.text)。当切换语句时,我会打印“名字艺术家专辑...”的值,并且为什么要打印变量名称感到困惑。事实并非如此。这只是打印该标签的文本。 – ASwiftPeregrine