这是Python错误吗?变量在递归函数中的for循环后丢失值。这是测试代码。我真的在解析XML
def findversion(aNode, aList, aFlag):
print "FindVersion ", aNode[0:1]
print "Findversion ", aFlag
if aNode[1].find('Software') != -1:
aFlag = 1
aList.append(aNode[1])
if aFlag == 1 and aNode[0] == 'b':
aList.append(aNode[1])
print "Before for ", aFlag
for elem in aNode[2:]:
print "After for ", aFlag
findversion(elem,aList,aFlag)
node = ['td', 'Software version']
node2 = ['b', '1.2.3.4' ]
node3 = [ 'td', ' ', node2 ]
node4 = [ 'tr', ' ', node, node3 ]
print node4
myList = list()
myInt = 0
findversion(node4,myList,myInt)
print "Main ",myList
在下面的程序输出中,我总是希望Before for输出与After for输出相同
程序输出:
['tr', ' ', ['td', 'Software version'], ['td', ' ', ['b', '1.2.3.4']]]
FindVersion ['tr']
Findversion 0
Before for 0
After for 0
FindVersion ['td']
Findversion 0
Before for 1
After for 0
FindVersion ['td']
Findversion 0
Before for 0
After for 0
FindVersion ['b']
Findversion 0
Before for 0
Main ['Software version']
Python版本:
Python 2.7.3 (default, Dec 18 2012, 13:50:09)
[GCC 4.5.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
此
After
来自封闭的findversion
调用:令人困惑的输出是因为
After for 0
输出来自函数的不同递归调用(与它上面的Before for 0
输出不同)以下是函数的一个版本,其中包含一些用于跟踪递归调用深度的额外信息:
这是新的输出,它显示了我所说的:
这不是一个错误。变量aFlag只是特定函数调用的局部变量,因为它是通过值传递的。当程序打印“Before for 1”时,它永远不会进入for循环,因为阳极[2:]是空的(阳极当时只有两个元素)。因此,它从不打印任何“After for”,而是立即返回
如果将print语句“After for”实际放在for循环之后,而不是放在for循环内部,则输出将更加清晰。然后输出将是一致的
相关问题 更多 >
编程相关推荐