回答編集履歴

1

追記

2022/09/06 08:43

投稿

TakaiY
TakaiY

スコア13492

test CHANGED
@@ -12,3 +12,67 @@
12
12
  他にも同じようにする必要のある変数があります。
13
13
 
14
14
  ちなみに、pythonの関数内の変数のスコープ(有効範囲)ほちょっと特殊なので、調べてみてください。
15
+
16
+ ---
17
+ 変数のスコープについてちょっとだけ。
18
+
19
+ pythonでは、ファイルに直接書いてあればファイルの中、関数の中にあれば関数の中、だけで有効です。
20
+ ```python
21
+ v = 100
22
+
23
+ def hoge():
24
+ v = 55
25
+ print(f'naka: v = {v}')
26
+
27
+ print(f' soto: v = {v}')
28
+ hoge()
29
+ print(f' soto: v = {v}')
30
+
31
+ # 以下実行結果
32
+ soto: v = 100
33
+ naka: v = 55
34
+ soto: v = 100
35
+ ```
36
+
37
+ 関数の中でvの値を書き換えても外のvの値は変りません。
38
+ 逆に言うと、hoge関数の中では外のvの値は変えられません。
39
+
40
+ globalを宣言すると関数の外の変数を中で書き換えることができます。
41
+
42
+ ```python
43
+ v = 100
44
+
45
+ def huga():
46
+ global v
47
+
48
+ v = 55
49
+ print(f'naka: v = {v}')
50
+
51
+ print(f'soto: v = {v}')
52
+ huga()
53
+ print(f'soto: v = {v}')
54
+
55
+ # 出力結果
56
+ soto: v = 100
57
+ naka: v = 55
58
+ soto: v = 55
59
+ ```
60
+
61
+ ただし、参照(値を取得)するだけで変更しないのであれば、globalにしなくても値を見ることができます。
62
+
63
+ ```python
64
+ v = 100
65
+
66
+ def huga():
67
+ print(f'naka: v = {v}')
68
+
69
+ print(f'soto: v = {v}')
70
+ huga()
71
+ print(f'soto: v = {v}')
72
+
73
+ # 出力結果
74
+ soto: v = 100
75
+ naka: v = 100
76
+ soto: v = 100
77
+ ```
78
+