ちゃんと理解していないとドツボにはまる(実際嵌まった)
$> cat f1.py
def f1():
y = x*2
print("関数の中: x =", x)
x = 10
print("関数を呼ぶ前: x =", x)
f1()
print("関数を呼んだ後: x =", x)
$> python3 f1.py
関数を呼ぶ前: x = 10
関数の中: x = 10
関数を呼んだ後: x = 10
$> cat f2.py
def f2():
x = x*2
print("関数の中: x =", x)
x = 10
print("関数を呼ぶ前: x =", x)
f2()
print("関数を呼んだ後: x =", x)
$> python3 f2.py
関数を呼ぶ前: x = 10
Traceback (most recent call last):
File "f2.py", line 7, in <module>
f2()
File "f2.py", line 2, in f2
x = x*2
UnboundLocalError: local variable 'x' referenced before assignment
$> cat f3.py
def f3(x):
x = x*2
print("関数の中: x =", x)
x = 10
print("関数を呼ぶ前: x =", x)
f3(x)
print("関数を呼んだ後: x =", x)
$> python3 f3.py
関数を呼ぶ前: x = 10
関数の中: x = 20
関数を呼んだ後: x = 10
$> cat f4.py
def f4():
global x
x = x*2
print("関数の中: x =", x)
x = 10
print("関数を呼ぶ前: x =", x)
f4()
print("関数を呼んだ後: x =", x)
$> python3 f4.py
関数を呼ぶ前: x = 10
関数の中: x = 20
関数を呼んだ後: x = 20
$> cat f5.py
def f5():
global x
x = 100
print("関数の中: x =", x)
x = 10
print("関数を呼ぶ前: x =", x)
f5()
print("関数を呼んだ後: x =", x)
$> python3 f5.py
関数を呼ぶ前: x = 10
関数の中: x = 100
関数を呼んだ後: x = 100