回答編集履歴
1
誤解を招く表現を修正し、サンプルコードを追加しました。
test
CHANGED
@@ -46,7 +46,13 @@
|
|
46
46
|
|
47
47
|
補足事項として今回のコードのようにローカルなスコープ内でも global 宣言して global 変数を定義可能です。
|
48
48
|
|
49
|
+
(Python では変数への代入が変数の定義です)
|
50
|
+
|
49
|
-
気を付けることとして、変数を参照するだけの場合は外側のスコープの変数になる点があります。
|
51
|
+
~~気を付けることとして、変数を参照するだけの場合は外側のスコープの変数になる点があります。~~
|
52
|
+
|
53
|
+
気を付けることとして、関数内のスコープで global, nonlocal の宣言がなく、変数とオブジェクトの束縛関係を更新しない場合は外側のスコープの変数になる点があります。
|
54
|
+
|
55
|
+
|
50
56
|
|
51
57
|
```Python
|
52
58
|
|
@@ -71,3 +77,35 @@
|
|
71
77
|
# F: foo
|
72
78
|
|
73
79
|
```
|
80
|
+
|
81
|
+
```Python
|
82
|
+
|
83
|
+
lst = [0, 1, 2]
|
84
|
+
|
85
|
+
def scope():
|
86
|
+
|
87
|
+
print("G:", lst) # lst is global's loc
|
88
|
+
|
89
|
+
def do_local():
|
90
|
+
|
91
|
+
lst[1] = 4 # lst is global's loc lst 変数の束縛関係は更新されない
|
92
|
+
|
93
|
+
print("H:", lst) # lst is global's loc
|
94
|
+
|
95
|
+
do_local()
|
96
|
+
|
97
|
+
lst[0] = 3 # lst is global's loc lst 変数の束縛関係は更新されない
|
98
|
+
|
99
|
+
print("I:", lst) # lst is global's loc
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
scope()
|
104
|
+
|
105
|
+
# G: [0, 1, 2]
|
106
|
+
|
107
|
+
# H: [0, 4, 2]
|
108
|
+
|
109
|
+
# I: [3, 4, 2]
|
110
|
+
|
111
|
+
```
|