Python if或for语句中定义的变量
在Python if或for语句中定义的变量,python,variables,if-statement,for-loop,garbage-collection,Python,Variables,If Statement,For Loop,Garbage Collection,在if语句或for循环(如果从代码运行时起经过很长时间)中首次分配(定义)的变量会发生什么情况。是否存在某种可能导致未定义变量异常的垃圾收集。例如: if True: a=1 else: a=3 # long time passed and other codes run # . # . # . print (a) 我在代码中遇到了一个错误,我怀疑这就是原因。它是否记录在Python官方文档的某个地方?在Python中,如果在if语句中定义了一个变量,它将在if语句结束后继续存在。
if
语句或for
循环(如果从代码运行时起经过很长时间)中首次分配(定义)的变量会发生什么情况。是否存在某种可能导致未定义变量异常的垃圾收集。例如:
if True:
a=1
else:
a=3
# long time passed and other codes run
# .
# .
# .
print (a)
我在代码中遇到了一个错误,我怀疑这就是原因。它是否记录在Python官方文档的某个地方?在Python中,如果在
if
语句中定义了一个变量,它将在if
语句结束后继续存在。为类
、def
或全局范围定义范围;例如,如果您在函数中,并且在if
中定义了一个变量,则该变量将一直存在,直到函数执行完毕
但是,在这样的代码中定义变量时要小心:
if x == True:
a = 1
else:
print "Not true"
如果您有这样的代码,并且
x
最终为False
,那么a
将不会被定义。以后调用a
将引发异常。因此,请确保排除任何此类潜在问题。除非变量超出范围,否则不应对其进行垃圾收集。这就是ref计数的工作原理(Python垃圾收集的方式)。变量保持不变,只要作用域存在,除非它们被dela
删除。你为什么怀疑这是原因?您发布的代码无法复制您怀疑的错误。您可以尝试在if-else语句之后打印(a)作为调试方法吗?可能是重复的