【发布时间】:2020-04-02 08:56:31
【问题描述】:
昨天我在 Python 2.7.10 下遇到了(在我看来)一个不寻常的范围问题(尽管问题也在 Python 3 中)。我的 atexit 函数似乎看不到函数内设置的全局字符串,而全局列表很好。我已将问题案例简化为:
import atexit
myString1 = None
myString2 = None
myArray1 = []
myArray2 = []
def setString1(newString):
myString1 = newString
def setArray1(newString):
myArray1.append(newString)
def testFinishUp():
print("myString1 = " + str(myString1))
print("myString2 = " + str(myString2))
print("myArray1 = " + str(myArray1))
print("myArray2 = " + str(myArray2))
setString1("Hello")
myString2 = "World"
setArray1("HELLO")
myArray2.append("WORLD")
atexit.register(testFinishUp)
这个输出是什么:
myString1 = None
myString2 = World
myArray1 = ['HELLO']
myArray2 = ['WORLD']
现在,我确信 myString1 的行为方式与所有其他人的行为方式不同是有逻辑范围相关的原因,但我看不出它是什么。 :-(
谁能解释一下这里发生了什么?谢谢!
【问题讨论】:
-
哦!这是你可以盯着看几个小时而不知道实际问题是什么的事情之一。谢谢大家非常有帮助的回复! :-)
标签: python python-3.x python-2.7 scope atexit