第12章 関数について
12.2 変数の有効範囲
関数を利用する場合、関数内で新しく変数を宣言することがあります。関数内で宣言された変数(ローカル変数)と、関数外で宣言された変数(グローバル変数)では、アクセスできる有効範囲(スコープ)が異なるので、注意しなければなりません。
グローバル変数に関しては、同一のファイル内のどこからでも参照できるのに対して、ローカル変数は、関数の中でしか参照できません。
図 12.2.1:グローバル変数とローカル変数
凡例
def test(): fc_scope = ‘太郎’ print(fc_scope) fc_scope = ‘次郎’ test() print(fc_scope)
実行結果
この凡例における変数fc_scopeの値は、ファイル全体では「次郎」が格納されますが、関数test()内でのみ「太郎」が適用されます。
そのため関数test( )を実行した際は、「太郎」が出力されますが、それ以外でfc_scopeを実行すると、「次郎」が出力されます。
図 12.2.2:グローバル変数、ローカル変数の凡例
12.2.1 グローバル変数の値を関数内で書き換える方法
この通り、ローカル変数の値は関数内でのみ有効です。
ですが関数の内部でグローバル変数を使用することをglobal文で明示することで、関数内部でグローバル変数を使用することができ、そうすることで関数内部でもグローバル変数の値を書き換えることができます。
書式:global文を明示する方法
global 変数名
凡例
fc_scope = '次郎' def test(): global fc_scope fc_scope = '太郎' print('実行前:',fc_scope) test() print('実行後:',fc_scope)
実行結果
実行前: 次郎 実行後: 太郎
変数fc_scope には最初、「次郎」が格納されています。関数test()では、グローバル変数であるfc_scopeをglobal文により、使用することを明示しており、fc_scopeの値を「太郎」に更新する命令文を記載しています。
そのため関数test()の実行前では、変数fc_scopeを出力すると「次郎」が表示されますが、test()の実行後は、格納されている値が「太郎」に更新されるため、変数fc_scopeを出力すると「太郎」が表示されます。
図 12.2.3:global文による関数内におけるグローバル変数の更新
ポイント
- 関数内で宣言した変数をローカル変数、関数外で宣言した変数をグローバル変数と呼ぶ。
- ローカル変数は関数内でのみ有効であり、グローバル変数は関数外でも有効である。
- global文を使用することで関数内でもグローバル変数の値を更新することができる。