我目前正在参加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
布尔值并返回给定键之前的值以检查它是否在那里是没有意义的第一名。当我尝试切换这两个语句时,程序无法正确读取数据。 为什么会这样?
如果有人希望我发布测试方法并发现为什么这不起作用,请告诉我,我会添加一些输出。
答案 0 :(得分:2)
Python像大多数语言一样从上到下评估语句。我的猜测只是该函数应该在具有给定key
的元素之后返回 next 元素。
<dict>
中的Library.xml
元素如下所示:
<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语义中的字典,而只是一个元素<dict>
,其中包含交替的列表 <key>
和{{ 1}}元素,后者是前面键的值。因此,如果您要查找给定键的值,则迭代列表<integer/string/date/whatever>
,直到找到d
,然后返回下一个key
的{{1}}。< / p>
假设那些text
元素总是很好地形成,你也可以使用它:
child