第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文を使用することで関数内でもグローバル変数の値を更新することができる。

NEXT>> 12.3 関数の応用的な使い方