裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

変数のスコープ

2020年11月02日 | Python

ちゃんと理解していないとドツボにはまる(実際嵌まった)


$> 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

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村