レッスン1 / 1問目

『変数のスコープ』

このレッスンでは変数のスコープについて学習していきましょう。

スコープとは変数の有効範囲のことです。

この有効範囲は変数が関数の中で定義されたか関数の外で定義されたかで決まります。関数の外で定義された変数をグローバル変数と呼び、グローバル変数はファイル全体に対して有効です。

逆に関数の中で定義された変数をローカル変数といい、関数内でのみ有効となります。まずはグローバル変数とローカル変数について見ていきましょう。

グローバル変数とローカル変数

以下のコードでは青枠部分がグローバル変数、関数内にある赤枠部分がローカル変数となります。

  1. a = "グローバル変数"    # グローバル変数
  2. def func():
  3.     b = "ローカル変数"    # ローカル変数
  4.     return b

有効範囲

以下はグローバル変数とローカル変数の有効範囲です。

pythonの変数のスコープ

変数aはグローバル変数であるため赤枠の関数内でも有効ですが、変数bはローカル変数であるため関数外では呼び出すことはできません。

global変数の更新

ここではグローバル変数の特徴を見ていきましょう。
以下の例ではグロバール変数aを関数内で再定義しています。ここでのポイントは7行目でfunc()を実行しているのに8行目のprint関数で出力したグローバル変数の内容が書き換えられていない点です。

  1. a = "global"
  2. def func():
  3.     a = "local"
  4.     print(a)
  5. func()
  6. print(a)
local global    # 変数の内容が書き換えられていない

global

このように関数内でグローバル変数の値を再定義してもそれはローカル変数の定義として扱われるためグローバル変数は変更されません。

しかし、関数内でグロバール変数の値を変更したいという場合にはそれが可能となっています。
それには以下のようにglobalに続けてグローバル変数を記述します。これにより関数内からグローバル変数の値を変更することができます。

global グローバル変数

これをグローバル宣言と呼びます。

global宣言の例

以下の例では関数内でglobal宣言を行っています。
9行目のprint関数で出力した変数aの値が書き換えられていることがわかります。

  1. a = "global"
  2. def func():
  3.    global a    # グローバル宣言
  4.     a = "local"
  5.     print(a)
  6. func()
  7. print(a)
local local    # グローバル変数が書き換えられている

まとめ

ではこのレッスンの内容をまとめます。

  • グローバル変数はファイル全体に対して有効であるのに対しローカル変数は関数内でのみ有効
  • この有効範囲を変数のスコープと呼ぶ
  • ローカル変数内ではグローバル変数の値を参照することはできるが更新(変更)することはできない
  • global宣言を行うことにより関数内でグローバル変数の値を更新することができる。

Lesson1

まずはエディタのコードを実行してください。 すると以下のように出力されます。

local global

これをglobal宣言を用いて以下のように出力されるようにコードを書き換えてください。。

local local

Last updated:2019/12/17

local
local
  1. g = "global"

  2. def local():
  3. global g
  4. g = "local"
  5. print(g)

  6. local()
  7. print(g)
main.py
設定
g
n
i
d
a
o
L