カテゴリ:Python 投稿:2022年8月4日13:12、更新:2022年8月17日0:03
・記事の概要
Pythonチュートリアル(第4版)の9章(クラス)における
変数のスコープについて図などを用いて説明します。
初学者や非エンジニアの方にも、なるべく分かりやすくまとめます!
・この記事の対象
・Python認定基礎試験を受験する方(非エンジニアの方含み)
・Pythonチュートリアルの読者で内容が腹落ちしていない方
・9章やスコープの内容がまだ不明瞭な方、これから読む方
・なんの解説か
Pythonチュートリアル(第4版)を章ごとに解説していきます。
今回はPythonチュートリアルの9章についての記載ですが
関数やクラスの内外で変数の名前空間がどのように管理されるか
を説明します。
初見だと「なんとなく分かるけどイメージが明確にならない」と
思う方も多いのではないでしょうか。
そんな時のためにも
今回は「ソース」と「図説」で説明していきますね。
また、公式書籍の準備がまだという方は、購入をお勧めします。
内容が分かりにくいというレビューも聞きますが、
(実際に初学者へ凄く丁寧な説明というわけではないが)
要点をかなりしっかり抑えた内容ですので、
資格取得という面ではなくとも手元にあるといいものです。
・変数のスコープを明確にする
実際のコードも交えて解説します。
ほとんどコメント内で説明してしまっていますが
登場する変数はどれも「arg1」という状態で
関数(def)を4つ定義しており、それぞれarg1について代入処理があります。
最後にarg1の出力と関数の呼び出しをしており、出力結果も表示しています。
さらに色分けした図解で見てみましょう。
こうするとより明確に見えてくるかもしれません。
「グローバル変数」はモジュール内のどこからでもアクセスできる変数。
func1内の変数はfunc2,3を含めたfunc1内からはアクセスできる外側の「ローカル変数」。
func3内の変数はfunc3内からはアクセスできる内側の「ローカル変数」。
という感じで、区分けができると思います。
ではfunc2,4は内の変数はどうかというと
2は「nonlocal」をつけることで外側(func1)のローカル変数にアクセスしており
4は「global」をつけることでグローバル変数にアクセスしています。
func1内のprintはfunc1冒頭のローカル変数arg1を表示するので
func2を実行した後に「nonlocal」により変更されています。
モジュール冒頭のグローバル変数args1は
func4の実行後に「global」により変わっていますね。
・クラスと変数の考え方
クラス内での変数は上記に比べると簡単に捉えることができるかもしれません。
コメント記載の通り
クラス内にクラス変数とインスタンス変数を持たせることができます。
インスタンス変数は__init__内に宣言されていますので
インスタンスごとに、それぞれ値を持つことになります。
クラス変数は共通で持つので、2つのインスタンスオブジェクトから
呼び出されても同様に「triangle」を返していますね。
クラスについては以下記事を並行して読んでもらえると
理解が深まるかと思いますので是非。
・まとめ
いかがだったでしょうか。
今回の内容は非常に基本的ですが、
関数の変数はスコープを図解のように枠で捉えて
クラスの変数はクラス変数とインスタンス変数でそれぞれ捉えましょう。
Python3認定基礎試験の解説記事は今後も続けてみようと思いますが、
皆様の参考になれば幸いです。
繰り返しにはなりますが、受験には公式書籍があった方がいいですので
メインは書籍でインプットをしていきましょう!
ただ「本当にプログラミング自体が初心者で」という場合は公式書籍の前に
「スッキリシリーズ」のテキストから入ると挿絵や説明がかなり分かりやすく
初めての理解には役立つかもしれません。
私も未経験の新卒時にはJavaで同じシリーズを読んでいました。
(経験者からすると少し冗長的かもしれないが、それくらい丁寧である)
・関連記事
Python3認定基礎試験関連の記事が以下にもあります。
参考までにぜひ!
・第4章(P30~)に関する説明記事
・第9章の前に読んでほしい記事
・1問1答形式で使いやすい演習問題サイトの紹介記事
Python3エンジニア認定基礎試験の使いやすい演習問題サイトをご紹介!
コメント一覧
コメント投稿ページへ