1

OK、以下のコードは完全にスクラップであり、私が作成した無意味なコードです。しかし、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関数ではありません。独自のスコープを作成する唯一の構成要素は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

私がほとんどと言ったのは、外部変数を変更する方法に、それらがグローバルであるか、それを囲む関数に属しているかによって微妙な違いがあるためです。

于 2012-11-18T02:08:15.873 に答える