0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python入門】変数のスコープについて

Posted at

Pythonの変数スコープの概念について

Pythonの変数のついてはLEGBルールという概念に基づきます。
LEGBはローカル、エンクロージング、グローバル、組み込み関数をスコープとして、スコープの検索順序を表します。各スコープについて説明します

LEGBについて

変数を参照するとき、Pythonは以下の順序でスコープを検索します。

  1. ローカル
  2. エンクロージング
  3. グローバル
  4. 組み込み関数

各スコープについて解説をしてきたいと思います。

ローカルスコープについて

関数内部で定義された変数は、ローカルスコープとなります。
関数内のみで有効となるため、関数外からのアクセスはエラーとなります。

def local_scope_function():
    #ローカルスコープ
    local_var = "ローカル変数"
    print(local_var)


def test_module():
    local_scope_function()
    # print(x) # NameError: name 'x' is not defined

エンクロージングスコープについて

関数内にネストされた関数がある場合、ネストされた関数からアクセスができます。
ネストされた関数は、外部のスコープを参照します。

def enclosing_scope_function():
    #外側のスコープ
    enclosing_var = "外側の変数"
    def local_scope_function():
        print(enclosing_var)
    local_scope_function()


def test_module():
    enclosing_scope_function()

グローバルスコープについて

上位で定義された変数がグローバル変数となり、どこからでもアクセスが可能となります。
globalキーワードを使用して、関数内からグローバル変数を変更することが可能となります。

x = 10

def global_scope_function():
    global x
    x = 20

def test_module():
    print(f"{x=}")
    global_scope_function()
    print(f"{x=}")

global_scope_functionを以下のようにすると、global_scope_function内のxはローカル変数として扱われるため、グローバル変数xは更新されません。

x = 10

def global_scope_function():
    x = 20

def test_module():
    print(f"{x=}")
    global_scope_function()
    print(f"{x=}")

ビルトインスコープについて

Pythonには標準ライブラリとして多くの組み込み関数や定数が定義されています。
これらについてはどこからでもアクセス可能となります。

# 例えばlenは組み込み関数となるため、どこからでもアクセス可能
print(len[1,2,3,4,5])

※ビルトインスコープについては念のため記載していますが、今回の説明する変数のスコープについての解説とは少し趣旨がずれるかもしれません。

まとめ

Pythonではスコープを意識する必要があります。変数がどのスコープに属しているかでアクセス範囲が変わります。アクセス範囲についてはLEGBルールに従って決まります。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?