変数には、その変数が有効な範囲というものが決められています。この範囲をスコープといいます。スコープにはグローバルスコープとローカルスコープの2つがあります。
プログラム全体で有効となるスコープをグローバルスコープといいます。関数の外部で値を代入した変数はグローバルスコープとなって、任意の関数からでもアクセスが可能です。このような変数をグローバル変数といいます。
num = 1
def test():
print(num)
test()
上記コードで、変数numに代入した値は、関数の外部で値を代入しているため、グローバルスコープとなります。そのため、test関数の内部からもアクセスが可能です。
関数の内部で値を代入したスコープは、その関数の内部でしか使用できません。このような変数をローカルスコープといいます。
def test():
num = 1
print(num)
上記コードのように、test関数の内部で変数numに値を代入しています。この場合の変数はローカルスコープとなるため、外部からアクセスすることはできません。
上記コードを実行すると、以下の様にエラーが発生します。
% python scope.py
Traceback (most recent call last):
File "scope.py", line 4, in <module>
print(num)
NameError: name 'num' is not defined
グローバルスコープとローカルスコープに同じ名前の変数を付けた場合、関数の内部ではローカルスコープが優先されます。
num = 1
def test():
num = 2
print ("関数内のprint:",num)
test()
print("関数外のprint:",num)
上記コードでは、グローバルスコープとローカルスコープで同じ変数numを使用しています。関数の内部と外部で変数numの値を表示させるようにして実行した結果が以下の通りです。
% python scope.py
関数内のprint: 2
関数外のprint: 1
実行してみると、関数内部ではローカルスコープが優先され、関す外部ではグローバルスコープの値が表示されます。
関数内でグローバルスコープの変数に値を代入する場合は、関数の先頭にglobal文を記述します。
global 変数名
num = 1
def test():
global num
num = 2
print ("関数内のprint:",num)
test()
print("関数外のprint:",num)
global文を使用して、変数numをグローバルとして宣言します。実行結果は以下の通りです。
% python scope.py
関数内のprint: 2
関数外のprint: 2
関数の内部で代入した値がグローバル変数のnumへの代入となるため、関数内の変数も関数外の変数も「2」となります。
ネットワ-ク初心者のみなさま。
ネットワークの基礎知識を疎かにすることは
大変危険です!!
これを読めばネットワークの基礎が分かる!!
ネットワーク関連の仕事に就きたいとお考えの学生の方や、ネットワークに興味があって転職を考えている社会人の方、まずは登録してみてください。
もちろん無料です!!
↓メールマガジン購読はこちら↓