【问题标题】:Why can I access a non-global variable in one module from another in python?为什么我可以从 python 中的另一个模块访问一个模块中的非全局变量?
【发布时间】:2012-11-18 02:06:36
【问题描述】:

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

【问题讨论】:

    标签: python global-variables local-variables


    【解决方案1】:

    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
    

    我说几乎是因为根据外部变量是全局变量还是属于封闭函数,修改外部变量的方式存在一些细微差别。

    【讨论】:

    • 不只是 defclass -- genexps 和 comprehensions(除了 2.7 listcomps)有自己的范围,至少如果我理解术语的话。也就是说,i = 2; s = {i for i in range(10)}; print i 打印 2,而不是 9。[或者您可能不会将它们视为“构造”?不确定。]
    猜你喜欢
    • 2020-12-30
    • 2012-12-10
    • 1970-01-01
    • 2019-12-22
    • 2016-05-15
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多