回答編集履歴
2
追記
test
CHANGED
@@ -11,6 +11,16 @@
|
|
11
11
|
>>> a = 10
|
12
12
|
|
13
13
|
>>> def f():
|
14
|
+
|
15
|
+
... print(a)
|
16
|
+
|
17
|
+
...
|
18
|
+
|
19
|
+
>>> f() # 動く
|
20
|
+
|
21
|
+
10
|
22
|
+
|
23
|
+
>>> def f(): # 定義を上書き
|
14
24
|
|
15
25
|
... print(a) # ここではグローバル変数で、
|
16
26
|
|
1
追記
test
CHANGED
@@ -1,4 +1,34 @@
|
|
1
1
|
関数の中でその変数に対して代入(代入文`=`やインプレース代入`+=`などによる処理)が行われていれば、ローカル変数とみなすというルールになっています。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
これはスコープの問題なので、実行順序などは関係ありません。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
```python
|
10
|
+
|
11
|
+
>>> a = 10
|
12
|
+
|
13
|
+
>>> def f():
|
14
|
+
|
15
|
+
... print(a) # ここではグローバル変数で、
|
16
|
+
|
17
|
+
... a = 20 # ここではローカル変数という扱いにはならない
|
18
|
+
|
19
|
+
...
|
20
|
+
|
21
|
+
>>> f()
|
22
|
+
|
23
|
+
Traceback (most recent call last):
|
24
|
+
|
25
|
+
File "<stdin>", line 1, in <module>
|
26
|
+
|
27
|
+
File "<stdin>", line 2, in f
|
28
|
+
|
29
|
+
UnboundLocalError: local variable 'a' referenced before assignment
|
30
|
+
|
31
|
+
```
|
2
32
|
|
3
33
|
|
4
34
|
|