グローバルステートメントとは何ですか?それはどのように使用されていますか?私はPython's official definitionを読んだ。
しかし、私にはそれほど意味がありません。Pythonでは、グローバルステートメントとは何ですか?
答えて
すべての "変数" を参照してください。 Pythonの "file"のスコープはモジュールスコープです。考えてみましょう以下:ローカルスコープを持つ
#file test.py
myvariable = 5 # myvariable has module-level scope
def func():
x = 3 # x has "local" or function level scope.
オブジェクトは関数が終了するとすぐに死ぬと(あなたreturn
それらがない限り)が、関数内で、あなたはモジュールレベルのスコープ内の変数にアクセスすることができ、検索することはできません(または任意のコンテナスコープ):
myvariable = 5
def func():
print(myvariable) # prints 5
def func2():
x = 3
def func3():
print(x) # will print 3 because it picks it up from `func2`'s scope
func3()
しかし、あなたはその参照に代入を使用して、それが有効範囲外に伝播されることを期待することはできません。
myvariable = 5
def func():
myvariable = 6 # creates a new "local" variable.
# Doesn't affect the global version
print(myvariable) # prints 6
func()
print(myvariable) # prints 5
今、最終的にglobal
になりました。 global
キーワードは、関数内の特定の変数がグローバル(モジュールレベル)スコープで定義されていることをPythonに伝える方法です。言い換えれば
myvariable = 5
def func():
global myvariable
myvariable = 6 # changes `myvariable` at the global scope
print(myvariable) # prints 6
func()
print(myvariable) # prints 6 now because we were able
# to modify the reference in the function
あなたがglobal
キーワードを使用している場合、あなたはfunc
内からモジュールスコープでmyvariable
の値を変更することができます。
def func1():
x = 3
def func2():
print("x=",x,"func2")
y = 4
def func3():
nonlocal x # try it with nonlocal commented out as well. See the difference.
print("x=",x,"func3")
print("y=",y,"func3")
z = 5
print("z=",z,"func3")
x = 10
func3()
func2()
print("x=",x,"func1")
func1()
は今、この場合には、変数のいずれもグローバルスコープで宣言されていない、とpython2で、何も(簡単ではありません:さておき、スコープは任意の深さにネストすることができるように
/清掃)からfunc1
の範囲にあるx
の値を変更します。そのため、nonlocal
というキーワードがpython3.xで導入されました。 nonlocal
は、global
の拡張で、そのスコープから他のスコープから取得した変数を変更することができます。
+1を徹底的に説明してください。ただし、印刷ステートメントの結果を表示したい場合があります。 –
@StevenRumbalski - 完了。良い提案。 – mgilson
あなたの答えを読んだ後、これを自分自身でテストしました。私の理解はこの件に関して大幅に改善されました。どうもありがとうございました! – Capurnicus
基本的には、それは与えられた変数がデフォルトのローカルレベルではなく、グローバルレベルで変更または割り当てされるべきであることをインタプリタに伝えます。
あなたは、Pythonは、あなたが本当にそれはあなたが明示的に要求することにより、一緒に遊んでいるものを知っていることを確認したいそれを修正し、各機能にグローバルとしてそれを宣言することにより、他の関数でグローバル変数を使用することができます
a = 1
def f():
a = 2 # doesn't affect global a, this new definition hides it in local scope
a = 1
def f():
global a
a = 2 # affects global a
グローバルキーワード。
は、一定の範囲に制限されているPythonでthis answer
mgilsonはいい仕事をしましたが、もう少し追加したいと思います。関数の内部
list1 = [1]
list2 = [1]
def main():
list1.append(3)
#list1 = [9]
list2 = [222]
print list1, list2
print "before main():", list1, list2
>>> [1] [1]
main()
>>> [1,3] [222]
print list1, list2
>>> [1, 3] [1]
、あなたはグローバルとして宣言しない限り、Pythonはローカル変数 としてすべての変数を前提としています。または、グローバル変数にアクセスしています。
list1.append(2)
'list1'にアクセスしていてリストが変更可能であるため、可能でした。
list2 = [222]
ローカル変数を初期化するために可能でした。あなたはコメントを解除#リスト1 = [9]、あなたは
UnboundLocalError: local variable 'list1' referenced before assignment
を取得する場合はそれはあなたが新しいローカル変数「リスト1」を初期化しようとしているが、それはすでに前に参照された、 そしてあなたがあることを意味し
それを再割り当てするためにスコープから外します。
スコープを入力するには、 'list1'をグローバルとして宣言します。
最終的にタイプミスがあっても、thisを読むことを強くお勧めします。
- 1. セミコロンはPythonグローバルステートメントで動作しますか?
- 2. "$ python"とは何ですか?
- 3. Pythonでは "\ 00"とは何ですか?
- 4. PythonのPythonとは何ですか?
- 5. Pythonスクリプトで%{__ python34}とは何ですか?
- 6. Pythonで '%% file test.py'とは何ですか?
- 7. Pythonでdeconstructible doとは何ですか?
- 8. Pythonでasyncとは何ですか?
- 9. Python:ヘッダとは何ですか?
- 10. OSXのPythonイメージビューアとは何ですか?
- 11. Pythonのメタクラスベースとは何ですか?
- 12. Python Anywhereとは何ですか?
- 13. Pythonの「モデルオブジェクト」とは何ですか?
- 14. BDB for Pythonとは何ですか?
- 15. Pythonのフリーズプロセスとは何ですか?
- 16. Python - sklearn.pipeline.Pipelineとは何ですか?
- 17. Pythonの式とは何ですか?
- 18. Pythonのプロトタイピングとは何ですか?
- 19. Pythonのリファレンスサイクルとは何ですか?
- 20. 'Python executable'とは何ですか?
- 21. Python GUI:tkinterの 'スクリーンユニット'とは何ですか?
- 22. Pythonでは、print文でthis end = ""とは何ですか?
- 23. Pythonで `round`と` __round__`の違いは何ですか? python 3では
- 24. Pythonでは、パスとリターンの違いは何ですか
- 25. Python 3では "ブロック"とは何ですか?
- 26. Pythonでは、文字バッファとは何ですか?
- 27. pythonで直観的にfitfuncとerrfuncとは何ですか?
- 28. pythonで 'set.intersection()'のアルゴリズムは何ですか?
- 29. Pythonで@staticmethodのポイントは何ですか?
- 30. python 2とpython 3の違いは何ですか?
2.4はPythonの古いバージョンです。[python 2.Xバージョンの実際の参照はこちら](http://docs.python.org/2/reference/simple_stmts.html#global) –
Python 3には 'global 'と一緒に' nonlocal'という新しいステートメントが付いています。 –
@ TahaJahangir - それは良い点です。私はあなたのコメントのために私の答えで 'nonlocal'に少し斬新を加えました。ありがとう! – mgilson