pythonの変数の定義の仕方や変数の有効範囲スコープについて
変数範囲 スコープについて
“x = 1″や”str = “Hello World!”などの変数はコード中の書く場所で有効範囲が変化します。
ローカル変数
例:関数内の変数は関数内で機能する
簡単なfuncという関数を定義し、その中にvar1という関数を用意します。
func関数内のvar1をprintすると”var1 is not defined”とでて、var1はまだ定義されてないと怒られます。
def func():
var1 ="local variable"
return var1
print(func())
print(var1)
30 #print(func())
NameError: name 'var1' is not defined #print(var1)
var1は関数内の変数・ローカル変数なので関数の外では使えない
var1が定義されていないと怒られるのは、var1がfunc()関数内で定義されたローカル変数だからです。
var1は関数内の処理では有効ですが、関数外の処理ではvar1は無効です。
一見不便のような気もしますが、コードが何万行にもなったときにvar1のような簡単な変数名では、どこかと被って変数の内容が入れ替わってバグの原因になることもあります。かと言ってユニークな変数名にしてもコーディングがめんどくさくて使いにくいです。
1002行目 var1 = a + b
:
23567行目 var1 = "not defined" #変数の範囲が広いと被ってしまい、バグの原因になりかねない
---
var_20201109_00041 = args[0] #変数名をユニークにしても覚えにくくてうち間違えたりする
したがって、変数は使用場面でのみ有効であるのが好ましい…
グローバル変数
どこからでも参照できる変数・グローバル変数
関数内の変数・ローカル変数は関数内でしか利用できませんが、全体で利用できる変数・グローバル変数もあります。
pythonでは関数外に書いた変数はグローバル変数になります。
関数外に書いたa=10のグローバル変数は関数内からでも外でも参照可能
a=10は関数外に定義したグローバル変数です。
関数内に定義したvar1は関数外でprintしても表示できませんでしたが、aは関数内、関数外どちらでも参照可能です。
a = 10
def func():
return a
print(func())
print(a)
関数内のローカル変数をグローバル変数として宣言する
global関数を使うとローカル変数をグローバル変数として宣言できます。
下記の例ではaはグローバル変数、bはローカル変数です。
def func():
global a
a = 10
b = 20
return a
print(func())
print(a)
print(b)
出力結果:
10 #print(func())
10 #print(a)
^
NameError: name 'b' is not defined #print(b)
bはローカル変数なので、関数外でprintしても表示できない。