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

标签 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中全局变量和局部变量的属性感到困惑。谁能解释为什么会发生上述情况?

最佳答案

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

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

关于python - 为什么我可以在 python 中从另一个模块访问一个模块中的非全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13436828/

相关文章:

javascript - 如何在不使用全局变量的情况下在 javascript 中存储和访问 ajax 数据?

windows - 如何在 CMD.EXE 语句中使用 Powershell 全局变量

java - java中final局部变量的使用

c++ - 是否可以在其范围之外访问局部变量的内存?

python - numpy 数组中的字典?

python - 如何根据不在列表中的索引选择数据框

python - H2O Predict() 函数的性能

php - $_POST、$_GET 和 $_REQUEST 之间有什么区别?

python - 在 pandas 中创建列配对

c++ - 在 C++ 的 void 函数中可以有很多参数吗?