1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

子供の想像力を伸ばしアイデアを形にする小学生向けプログラミング教室「プロスタキッズ」

Python超入門その14〜意外と重要なスコープを理解しておこう〜

Pocket

はじめに

Pythonのスコープについてご存じですか?

結構地味な存在なので見落とされがちですが、しっかり理解しておく必要がある重要な要素です。スコープの概念の理解はキレイなプログラムを書くために必須なので、常にスコープを意識してコードを書く必要があります。スコープはバグのもとになることもあるため、ここでマスターしておきましょう。

この記事では、Python初心者の方向けに、Pythonでのスコープについてお伝えしていきます。

スコープの概念について

スコープとは、簡単にいえば「変数が見える範囲」のことをいいます。変数が見えるというのは、つまるところアクセスできる(読み書きOK)ということを指します。これは、変数がプログラムのどこからでもアクセスできるわけではないことを意味します。各変数は、必ずいずれかのスコープに属しています。

スコープは、大きく「グローバルスコープ」と「ローカルスコープ」に分けられます。
次項から、それぞれのスコープについてみていきましょう。

グローバルスコープ

グローバル(モジュール)スコープは、最上位のスコープであり、ファイル(モジュール)内からであればどこからでもアクセスできます。たとえば、次のような例をみてみましょう。

例:

 

例のように、グローバルスコープにある変数は、ファイル(モジュール)内であれば、どこからでもアクセスできます。ここでは、printstr関数がグローバル変数sをコンソールに出力しています。

ただし、関数内でグローバル変数に代入する(書き換える)場合は、一手間必要になります。それについては、後ほど説明します。次は、ローカルスコープです。

ローカルスコープ

ローカルスコープは、関数内のスコープを指します。たとえば、次のような例です。

例:

 

ローカルスコープは、関数が呼ばれる度に生成されます。つまり、関数ごとに固有のローカルスコープを持っているということです。このため、同じ関数であっても変数が共有されることはありません。

例では、ローカル変数sを宣言してコンソールに出力しています。ローカル変数はグローバルスコープからはアクセスできないため、最後の行はエラーとなります。

ネストされた関数のスコープ

実は、関数内にさらにネストされた関数を記述することもできます。たとえば、次のような形です。

例:

 

例では、printstr関数内にprintstrchild関数を定義して呼び出しています。ネストされた関数は、親の関数のローカルスコープにアクセスできます。逆に、親の関数はネストされた関数のローカルスコープにアクセスできません。

関数内でグローバル変数にアクセスする

次に、関数内でグローバル変数を書き換える(再代入する)方法をみていきましょう。
それには、次のようにglobalキーワードを使います。

例:

 

関数内でグローバル変数に再代入する場合には、globalキーワードを使って明示的に宣言する必要があります。これをしない場合、ローカル変数sが生成されるため、グローバル変数には代入されません。これは、先程のネストされた関数の場合も同様です。

ネストされた関数から親のローカル変数にアクセスする

ネストされた関数から親のローカル変数を書き換えるには、また別のキーワードを使います。
次の例をみて下さい。

例:

 

ネストされた関数の場合は、globalキーワードの代わりにnonlocalキーワードを使います。グローバル変数の場合と同様、明示的に宣言しないと新しいローカル変数が生成されてしまうので注意が必要です。

まとめ

いかがでしたでしょうか?

スコープは単純なようでいて、結構奥深いものなのです。スコープをしっかり理解して、プログラミングを進めていきましょう。一般的に、スコープは狭いほど良いとされています。
なぜなら、変数にアクセスできる場所が限定され、予期しない変更を最小限に防げるからです。
グローバル変数だらけのプログラムは、とても読みにくいので注意しましょう。

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

初心者がプログラミングで挫折しない学習方法を無料動画で公開中。オンラインに特化したプログラミングスクール「TechAcademy(テックアカデミー)」が解説。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

ページ上部へ戻る