好吧,下面的代码完全是废料,我编的毫无意义的代码;但我觉得很奇怪,我可以从 qwerty() 函数访问变量“b”,而 b 只在内部声明,而...我以为我只能访问它,如果我以某种方式全局声明它?
x = 14
while (x > 10):
b = 3
b += 3
print(b)
x -= 1
def qwerty():
if b == 6:
print("b can be accessed elsewhere?")
input("")
运行这段代码,“b可以在别处访问吗?”将被打印...即使 b == 6 引用了在单独的 while() 函数中声明的变量 b。
我想我仍然对python中全局变量和局部变量的属性感到困惑。谁能解释为什么会发生上述情况?
最佳答案
while
不是函数。唯一创建自己范围的构造是 def
、class
和生成器表达式/理解(取决于版本)。
if True:
while 1:
for x in range(1):
z = 1
break
def function():
print(z)
function() # prints 1
这与内部函数的工作方式几乎相同。
def function():
while True:
x = 5
break
def nested():
print(x)
nested() # prints 5
x = 10
nested() # prints 10
我说几乎是因为在如何修改外部变量方面存在一些细微差别,具体取决于它们是全局变量还是属于封闭函数。
关于python - 为什么我可以在 python 中从另一个模块访问一个模块中的非全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13436828/