1

好的,下面的代码完全是我编的废代码;但我觉得很奇怪,我可以从 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中全局和局部变量的属性感到困惑。谁能解释为什么会发生上述情况?

4

1 回答 1

6

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

我说几乎是因为在如何修改外部变量方面存在一些细微的差异,具体取决于它们是全局变量还是属于封闭函数。

于 2012-11-18T02:08:15.873 回答