「変数の値はいつまで保持されるの?」「変数の値が想定通りにならない!」という疑問や悩みを持っていませんか?
そんな悩みや疑問を解消できるように、この記事ではPythonにおける変数のスコープ(有効範囲)について解説しています。
この講座は、これからPythonを学ぼうとする初心者の方がPythonの基本を学ぶための講座です。
Pythonの代表的な構文の使い方を具体的なコードを例にして解説しています。
この記事は、以下のような方におすすめ!
Pythonの変数スコープについて知りたい方
Pythonの基本を学びたい方
Pythonファイルをモジュール化したりしていると、変数の値をいつまで保持させるのか管理する必要があります。
この記事を読めば、Pythonの変数スコープを理解でき、モジュール化しても変数を管理することができるようになります!
Pythonの基本をマスターして、Pythonプログラマーとしての一歩を踏み出しましょう!
前回の振り返り
前回の記事では、Pythonの例外処理について解説しました。
例外処理を扱えるようなったことで、想定外の挙動をしても原因を調べることができるようなったと思います。
例外処理について確認されていない方は、
こちらの記事もチェックするとより理解が深まりますよ!
今回のゴール
では、改めて今回のゴールを確認しましょう。
今回のゴールは、変数スコープについて理解し、実際に動作を確認することです。
実際に動かしてみると、変数の有効範囲をより体感できるので、ぜひ一緒に手を動かしてみましょう!
変数のスコープ
変数のスコープというのは、その変数が利用できる範囲のことです。
例えば、モジュール内で定義している変数と、モジュールを呼び出したプログラムが定義した変数が同じ名前になることがあります。
もしそうなっても問題なく動作するのは、変数にはスコープがあるからです。
では、どういうスコープになっているのでしょうか。
変数宣言
これまでも見てきた様に、
Pythonでは変数を定義する際に、特に宣言構文などを意識することなく変数を扱うことができていました。
以下のように特に変数宣言することを意識せずに扱っています。
basket = ['apple', 'orange', 'banana']
basket
['apple', 'orange', 'banana']
しかし、先日のモジュールについての記事のように、関数呼び出しを行うことがあります。
今回は、以下のモジュールで、
何つけずに宣言する
nonlocalで宣言する
globalで宣言する
の3パターンでの変数スコープについて
挙動を確認してきたいと思います。
まずはプログラムを見てみて、どんな結果になるか想像してみてください。
def scope_check():
def scope_local():
val = "local"
def scope_nonlocal():
nonlocal val
val = "nonlocal"
def scope_global():
global val
val = "global"
val = "test"
scope_local()
print('local_val is', val)
scope_nonlocal()
print('nonlocal_val is', val)
scope_global()
print('global_val is', val)
if __name__ == '__main__':
scope_check()
print('In module scope:', val)
local_val is test
nonlocal_val is nonlocal
global_val is nonlocal
In module scope: global
いかがでしょうか。
イメージ通りの実行結果になっていましたか?
それでは、一つずつ見ていきましょう。
関数内で宣言した変数
関数内で定義したものは、関数内でしか扱えません。
def scope_local():
val = "local"
よって、scope_local
でlocal
という文字列をval
に代入していますが、
local_val is test
が出力されます。
関数内でnonlocal
で宣言した変数
def scope_nonlocal():
nonlocal val
val = "nonlocal"
nonlocal
で宣言した変数は、関数内で宣言はしているものの、上位階層で宣言しているval
を指すことになります。
よって、scope_nonlocal
によってvalの値が書き換わり、nonlocal_val is nonlocal
が出力されます。
関数内でglobal
で宣言した変数
def scope_global():
global val
val = "global"
global
で宣言した変数は、モジュール直下の変数を指すことになります。
scope_global
内で、valへ値を代入していますが、
これはscopetest.py
直下の変数に代入していることになります。
なのでglobal_val is nonlocal
が結果として出力され、
In module scope: global
が出力されることになります。
いかがでしたでしょうか。
もし理解が難しかったら、ご自身の手元でも色々な箇所で変数を定義して動作を確認してみてください。
まとめ
今回の記事では、Pythonの変数スコープついて解説しました。
今回のポイントをまとめると、次のとおりです。
- 変数スコープは変数の宣言方法によって異なる
- 何もつけずに宣言する、nonlocalをつけて宣言する、globalをつけて宣言する3パターンがある
Pythonの変数スコープを理解し、効率よく変数を管理できるようになったのではないでしょうか。
Pythonで効率よく変数管理ができるようになればコード量を減らすことができます。
ぜひこの記事を参考にして、Pythonの変数スコープをマスターしてください!
以上、最後までお読みいただきありがとうございました。
未経験からのITエンジニア転職に挑戦したい方へ
転職も含めて真剣にプログラミングスキルを手に入れたいとお考えの方に、おすすめの方法をご紹介します。
結論から言うと、それは転職活動とスキル学習を同時に進める方法です!
同時に進める理由は、転職成功までの時間を短縮するためなんですが、
でも昼間は学校や本業もあるのに、転職活動と学習を同時にって無理!
って思いますよね?
そんな忙しい方には、スキル学習と転職サポートが一体となているウズカレIT
しかも、学習サポートも転職サポートも無料で利用できます!
ウズカレITはITスクールのウズウズカレッジ
体系的かつ総合的に学習サポートを受けることができます。
ITエンジニアはまだまだ売り手市場で、未経験可の求人もたくさんあります。
一度、ウズカレITの無料相談で不安に思ってることなどを相談してみるのがオススメです。