Pythonの 変数 には、2つの種類があります。
一つは ローカル変数 、もう一つは グローバル変数 です。
ローカル変数¶
関数の中で代入した変数は、すべて ローカル変数 となります。関数の定義 では、こんな関数を定義しました。
def fruit_price(number_of_momo, number_of_mikan):
    total_momo = number_of_momo * 200
    total_mikan = number_of_mikan * 40
    total = total_momo + total_mikan
    return total
この関数 fruit_price() の中で代入された変数(total_momo、total_mikan, total)は、すべてローカル変数です。また、関数の引数(number_of_momo と number_of_mikan) もローカル変数になります。
ローカル変数は、関数を実行しているあいだのみ、参照できます。fruit_price() の total_momo などの変数は、関数外からは参照できません。
グローバル変数¶
もう一つの変数は、グローバル変数 です。ローカル変数以外の、関数の外部で代入された変数は、すべてグローバル変数になります。
関数の定義 では、こんなプログラムを書きました。
momo = input("ももは何個買いますか?")  # ももの個数を入力する
num_momo = int(momo) # 入力した文字列を、整数値に変換する
ここで、変数 momo や num_momo は、関数の内部ではなく、関数の外部で代入されていますので、すべてグローバル変数になります。
関数とグローバル変数¶
ローカル変数は関数の内部でしか参照できませんが、グローバル変数は、どんな場合でも参照できます。
次の関数 test_global() は、関数の内部でグローバル変数 global_value を参照し、関数の引数で指定した値 arg と global_value との積を返します。
# global_value はグローバル変数
global_value = 100
def test_global(arg):
    # ローカル変数 arg と グローバル変数 global_value の積
    return arg * global_value
print(test_global(10)) # 10 * 100
関数 test_global() に引数を指定して呼び出すと、関数内で引数 arg とグローバル変数 global_value の掛け算を行います。
test_global(10) と、引数 に 10 を指定して呼び出すと、arg の値は 10、global_value の値は 100 に設定されていますから、結果は 10 * 100 で 1000 になります。
test_global(10) の戻り値は、グローバル変数 global_value の値を変えると変化します。
試しに、global_value の値を、100 から 200 に変更してから、もう一度 test_global(10) を実行してみましょう。
# global_value を 200 に変更
global_value = 200
print(test_global(10)) # 10 * 200
引数 arg の値は前回と同じ 10 ですが、グローバル変数 global_value の値が 200 になりましたから、結果は 10 * 200 で 2000 に変化しています。
モジュールスコープとローカルスコープ¶
Pythonプログラムのうち、関数以外の部分は、モジュールスコープ(Module scope) と言います。逆に、関数内の部分を、ローカルスコープ(Local scope) と言います。
モジュールスコープで代入された変数は グローバル変数 となリ、ローカルスコープで代入された変数は ローカル変数 になります。
前述のとおり、同じモジュールスコープで定義されたグローバル変数は、関数の内側でも参照できます。また、関数の内側では、グローバル変数だけではなく、同じモジュールスコープで定義した別の関数も呼び出せます。
次の例では、関数 func2() は、先に定義された関数 func1() を呼び出しています。
def func1(name):
    print("Hello", name, ", this is func1.")
def func2():
    func1("func2")
func2()
この例では、関数 func1() と func2() は、どちらも同じモジュールスコープで定義されていますから、func2() から func1() を呼び出せるのです。
同様に、モジュールスコープで import したモジュールも、そのスコープで定義された関数から参照できます。
次の例は、モジュールスコープで import した time モジュールを関数 print_time() 内で参照し、time.asctime() 関数を呼び出して現在の日付と時間を取得しています。
import time
def print_time():
    # モジュールスコープで import した timeモジュールを利用
    now = time.asctime()
    print("It is", now)
    
print_time()