2つの以前の回答は正しいですが、両方とも少し不明です。私はいくつかの例を紹介します:
あなたが表示されたコードが正常に動作します:
>>> gCharlie = "Global!"
>>>
>>> def foo():
... print(gCharlie)
...
>>> foo()
Global!
>>> print(gCharlie)
Global!
は、だからそれはまったく問題ではありません。ただし、関数内グローバル変数を割り当てることができません:
ご覧のとおり
>>> gCharlie = "Global!"
>>> def foo():
... gCharlie = "Local!"
... print(gCharlie)
...
>>> foo()
Local!
>>> print(gCharlie)
Global!
、グローバル変数gCharlieが変化しませんでした。これは、同じ名前の新しいローカル変数を作成したため、変更していないためです。これがエラーの原因です。
>>> gCharlie = "Global!"
>>> def foo():
... oldCharlie = gCharlie
... gCharlie = "Local!"
... print(gCharlie)
...
>>> foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'gCharlie' referenced before assignment
ヒントはエラーです。それはローカル変数gCharlieと言います。この問題はグローバルなgCharlieにアクセスできないことではなく、ローカルなものがまだ作成されていないことです。
ローカル変数を作成するのではなく、グローバル変数を変更することを指定します。これはglobalキーワードで行います。
>>> gCharlie = "Global!"
>>> def foo():
... global gCharlie
... oldCharlie = gCharlie
... gCharlie = "Local!"
... print(gCharlie)
...
>>> foo()
Local!
>>> print(gCharlie)
Local!
ご覧のとおり、グローバル変数を変更しました。
つまり、グローバル変数は通常は悪い考えです。それらを避けてください。パラメータとして変数を渡すようにしてください。
私はこのコードを自分で実行しましたが、そのようなエラーはありませんでした。おそらくこの関数を呼び出すコードを提供するでしょうか?それは別のファイルですか?もしそうなら、どうやってインポートしていますか? –
私はPythonの2つの異なるバージョンで上記を試してみましたが、それは完璧に動作しました。 – senderle