Skip to main content
 首页 » 编程设计

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

2025年05月04日18jirigala

好吧,下面的代码完全是废料,我编的毫无意义的代码;但我觉得很奇怪,我可以从 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 

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