■ はじめに
Pythonで、グローバル変数(global variables)を扱ったのでメモ。 ただ、あんまり使いたくない、、、 それと、nonlocal ってのもあるらしいので、これもメモ。
目次
【1】global 例:global宣言 【2】nonlocal 例 Case1:nonlocal宣言を使わない場合 Case2:nonlocal宣言を使う場合 【3】実験コード その1 その2 その3:global・nonlocal混合
【1】global
* グローバル変数(global variables)
例:global宣言
global_val = 'hello' def demo_function(): # ★global宣言★ global global_val global_val = 'world' print(global_val) print(global_val) demo_function() print(global_val)
出力結果
hello world world
【2】nonlocal
* 内部関数で外部関数の変数を変更したい場合、nonlocal宣言を用いる => 内部関数については、以下の関連記事を参照のこと。
Python ~ 基本編 / 関数・あれこれ ~
https://dk521123.hatenablog.com/entry/2020/11/02/000000
例
Case1:nonlocal宣言を使わない場合
def outer(): print("外部関数") value = 1 def inner(): print("内部関数") value = 2 # ここはローカル変数として定義 # 外部関数から内部関数を呼び出す inner() print(value) # 1 (内部関数の値に影響されない) outer()
Case2:nonlocal宣言を使う場合
def outer(): print("外部関数") value = 1 def inner(): print("内部関数") nonlocal value # 追加 value = 2 # 外部関数から内部関数を呼び出す inner() print(value) # 2 outer()
【3】実験コード
その1
global_val = 'hello' def demo_function(): print(global_val) print(global_val) demo_function() print(global_val)
出力結果
hello hello hello
その2
global_val = 'hello' def demo_function(): global_val = 'world' print(global_val) print(global_val) demo_function() print(global_val)
出力結果
hello world hello
その3:global・nonlocal混合
value = "1" def sample_method(): value = "2" def do_local(): value = "3" def do_nonlocal(): nonlocal value value = "4" def do_global(): global value value = "5" do_local() print("【A】", value) do_nonlocal() print("【B】", value) do_global() print("【C】", value) print("【D】", value) sample_method() print("【E】", value)
出力結果
【D】 1 【A】 2 【B】 4 【C】 4 【E】 5
参考文献
https://www.sejuku.net/blog/58897
関連記事
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / 関数・あれこれ ~
https://dk521123.hatenablog.com/entry/2020/11/02/000000