回答編集履歴

2

追記

2018/10/09 02:20

投稿

hayataka2049
hayataka2049

スコア30933

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

追記

2018/10/09 02:20

投稿

hayataka2049
hayataka2049

スコア30933

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