LoginSignup
7
10

More than 3 years have passed since last update.

Python の nonlocal と global の違い

Last updated at Posted at 2020-03-01

global 文は、一番外側の変数を参照します。
nonlocal 文は、関数のひとつ外側の変数を参照します。

#
# 対話モード >>> に
# コピペで実行できます。
#

間隔 = 0          # <--- global 文は、一番外側の変数を参照します。

def カウンターを作る():
    現在の値 = 0  # <--- nonlocal 文は、関数のひとつ外側の変数を参照します。
    def カウントする():
        global 間隔
        nonlocal 現在の値
        現在の値 = 現在の値 + 間隔
        return 現在の値
    return カウントする

カウントする = カウンターを作る()

# 間隔 = 0 なので 0 のまま
カウントする()
カウントする()
カウントする()

# 間隔 = 1 を設定すると 1 ずつ増える。
間隔 = 1
カウントする()
カウントする()
カウントする()
>>> # 間隔 = 0 なので 0 のまま
>>> カウントする()
0
>>> カウントする()
0
>>> カウントする()
0
>>> 
>>> # 間隔 = 1 を設定すると 1 ずつ増える。
>>> 間隔 = 1
>>> カウントする()
1
>>> カウントする()
2
>>> カウントする()
3
>>> 

関数の中で定義する関数の使いどころとしては、他にも「デコレータ」と「カリー化, 部分的適用」があります。

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10