回答編集履歴
1
誤解を招く表現を修正し、サンプルコードを追加しました。
answer
CHANGED
@@ -22,7 +22,10 @@
|
|
22
22
|
|
23
23
|
```
|
24
24
|
補足事項として今回のコードのようにローカルなスコープ内でも global 宣言して global 変数を定義可能です。
|
25
|
+
(Python では変数への代入が変数の定義です)
|
25
|
-
気を付けることとして、変数を参照するだけの場合は外側のスコープの変数になる点があります。
|
26
|
+
~~気を付けることとして、変数を参照するだけの場合は外側のスコープの変数になる点があります。~~
|
27
|
+
気を付けることとして、関数内のスコープで global, nonlocal の宣言がなく、変数とオブジェクトの束縛関係を更新しない場合は外側のスコープの変数になる点があります。
|
28
|
+
|
26
29
|
```Python
|
27
30
|
loc = "foo"
|
28
31
|
def scope():
|
@@ -34,4 +37,20 @@
|
|
34
37
|
scope()
|
35
38
|
# E: foo
|
36
39
|
# F: foo
|
40
|
+
```
|
41
|
+
```Python
|
42
|
+
lst = [0, 1, 2]
|
43
|
+
def scope():
|
44
|
+
print("G:", lst) # lst is global's loc
|
45
|
+
def do_local():
|
46
|
+
lst[1] = 4 # lst is global's loc lst 変数の束縛関係は更新されない
|
47
|
+
print("H:", lst) # lst is global's loc
|
48
|
+
do_local()
|
49
|
+
lst[0] = 3 # lst is global's loc lst 変数の束縛関係は更新されない
|
50
|
+
print("I:", lst) # lst is global's loc
|
51
|
+
|
52
|
+
scope()
|
53
|
+
# G: [0, 1, 2]
|
54
|
+
# H: [0, 4, 2]
|
55
|
+
# I: [3, 4, 2]
|
37
56
|
```
|