Python入門講座関数の定義

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

関数の定義関数のメリットローカル変数とグローバル変数関数の呼び出し方

Pythonの 変数 には、2つの種類があります。

一つは ローカル変数 で、関数の中で代入した変数は、すべてローカル変数です。関数の定義 では、こんな関数を定義しました。

def fruit_price(number_of_momo, number_of_mimkan):
    total_momo = num_momo * 200
    total_mikan = num_mikan * 40
    total = total_momo + total_mikan

    return total

この関数 fruit_price() の中で代入された変数(total_momototal_mikan, total)は、すべてローカル変数です。また、関数の引数(number_of_momonumber_of_mimkan) もローカル変数になります。

ローカル変数は、関数を実行しているあいだのみ、参照できます。fruit_price()total_momo などの変数は、関数外からは参照できません。

もう一つの変数は、グローバル変数 です。ローカル変数以外の、関数の外部で代入された変数は、すべてグローバル変数になります。

関数の定義 では、こんなプログラムを書きました。

momo = input("ももは何個買いますか?")  # ももの個数を入力する
num_momo = int(momo) # 入力した文字列を、整数値に変換する

ここで、変数 momonum_momo は、関数の内部ではなく、関数の外部で代入されていますので、すべてグローバル変数になります。

グローバル変数

ローカル変数は関数の内部でしか参照できませんが、グローバル変数は、関数の内部からも参照できます。次の関数は、関数の内部からグローバル変数 global_value と、関数の引数の積を返します。

In [27]:
# global_value はグローバル変数
global_value = 100


def test_global(arg):
    # ローカル変数 arg と グローバル変数 global_value の積
    return arg * global_value

print(test_global(10)) # 10 * 100
1000

test_global(10) の戻り値は、global_value の値を変えると変化します。

In [29]:
# global_value を 200 に変更
global_value = 200

print(test_global(10)) # 10 * 200
2000

モジュールスコープとローカルスコープ

Pythonプログラムのうち、関数以外の部分は、モジュールスコープ(Module scope) と言います。逆に、関数内の部分を、ローカルスコープ(Local scope) と言います。

モジュールスコープで代入された変数は グローバル変数 となリ、ローカルスコープで代入された変数は ローカル変数 になります。

前述のとおり、同じモジュールスコープで定義されたグローバル変数は、関数の内側でも参照できますが、関数から参照できるのは、モジュールスコープのグローバル変数だけではありません。同じモジュールスコープで定義した別の関数も、関数から呼び出せます。

次の例では、関数 func2() は、先に定義された関数 func1() を呼び出しています。

In [31]:
def func1(name):
    print("Hello", name, ", this is func1.")

def func2():
    func1("func2")

func2()
Hello func2 , this is func1.

また、モジュールスコープで import したモジュールも、関数から参照できます。次の例は、モジュールスコープで import した time モジュールを関数 print_time() 内で参照し、asctime() 関数を呼び出して現在の日付と時間を取得しています。

In [37]:
import time

def print_time():
    # モジュールスコープで import した timeモジュールを利用
    now = time.asctime()
    print("It is", now)
    
print_time()
It is Wed Sep 16 00:23:25 2020


【Copyright © 2001-2020 python.jp】 【Privacy Policy】 python_japan