35

グローバル変数はPythonでどのように機能しますか? 私はグローバル変数が悪であることを知っています。私はただ実験しているだけです。

これは Python では機能しません:

G = None

def foo():
    if G is None:
        G = 1

foo()

エラーが発生します:

UnboundLocalError: local variable 'G' referenced before assignment

私は何を間違っていますか?

4

4 に答える 4

67

global次のステートメントが必要です。

def foo():
    global G
    if G is None:
        G = 1

Python では、割り当てる変数はデフォルトでローカル変数になります。globalそれらをグローバル変数として宣言するために使用する必要があります。一方、参照しても代入しない変数は、自動的にローカル変数にはなりません。これらの変数は、囲んでいるスコープ内の最も近い変数を参照します。

Python 3.x は、nonlocalに類似したステートメントを導入しglobalますが、変数を最も近い外側のスコープにバインドします。例えば:

def foo():
    x = 5
    def bar():
        nonlocal x
        x = x * 2
    bar()
    return x

この関数は、呼び出されると 10 を返します。

于 2009-08-15T04:50:57.913 に答える
9

その関数内から、G をグローバルとして宣言する必要があります。

G = None

def foo():
    global G
    if G is None:
        G = 1

foo()
print G

単純に出力する

1
于 2009-08-15T04:51:33.107 に答える
2

次のように関数内で G をグローバルとして定義します。

#!/usr/bin/python

G = None;
def foo():
    global G
    if G is None:
        G = 1;
    print G;

foo();

上記の python は1.

このようにグローバル変数を使用することは、悪い習慣です

于 2009-08-15T04:54:34.147 に答える