【问题标题】:Hierarchy of priority (if statements in for loops)优先级层次结构(for 循环中的 if 语句)
【发布时间】:2017-07-14 10:37:19
【问题描述】:

我目前正在学习 Coursera 提供的 Python 数据库课程。该课程的链接可以在这里找到: https://www.coursera.org/learn/python-databases

我不是要求任何人做我的功课,只是为了澄清 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 布尔值并返回给定键的值之前 以检查它是否存在,这对我来说没有意义地方。但是,当我尝试切换这两个语句时,程序没有正确读取数据。 这是为什么?

如果有人想让我发布我的测试方式并发现为什么这不起作用,请告诉我,我会添加一些输出。

【问题讨论】:

  • Python 从上到下评估语句,就像大多数语言一样。我的猜测只是该函数应该在带有 key 的元素之后返回 next 元素。
  • 是的,这是有道理的。谢谢老大。

标签: python python-2.7 dictionary if-statement for-loop


【解决方案1】:

与大多数语言一样,Python 从上到下评估语句。我的猜测只是该函数应该在具有给定key 的元素之后返回 next 元素。

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 字典,而只是一个元素 &lt;dict&gt;,其中包含 列表 交替 &lt;key&gt;&lt;integer/string/date/whatever&gt; 元素,即后者是前面键的值。因此,如果您要查找给定键的值,则迭代列表 d 直到找到 key,然后返回下一个 childtext

假设那些&lt;dict&gt; 元素总是格式正确,你也可以这样使用:

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

【讨论】:

  • 谢谢。我现在明白了很多。在切换语句后如何测试函数甚至是有意义的,因为它只是打印我正在寻找的“键”(child.tag)的“值”(child.text)。切换语句时,我会打印值“Name Artist Album...”,并且对打印变量名称的原因感到困惑。不是。它只是打印该标签的文本。
猜你喜欢
  • 1970-01-01
  • 2017-08-03
  • 2017-07-31
  • 1970-01-01
  • 2016-06-16
  • 2019-06-09
相关资源
最近更新 更多