为什么我可以在python中从另一个模块访问一个模块中的非全局变量?

时间:2012-11-18 02:06:37

标签: python global-variables local-variables

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

1 个答案:

答案 0 :(得分:6)

while不是一个功能。创建自己的范围的唯一构造是defclass和生成器表达式/理解(取决于版本)。

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

我说几乎是,因为根据它们是全局变量还是属于封闭函数,你可以修改外部变量有一些细微的差别。