From 0766039bd9e6b9f5e6334e84666f5be698d41fc3 Mon Sep 17 00:00:00 2001
From: nsfisis
def f():
-x = 0
-def g():
-x += 1
+ def f():
+x = 0
+def g():
+x += 1
g()
f()
@@ -92,26 +92,26 @@ f()
local変数xが代入前に参照された、とある。これは、fのxを参照するのではなく、新しく別の変数をg内に作ってしまっているため。 前述のコードを宣言と代入を便宜上分けて書き直すと次のようになる。varを変数宣言のための構文として擬似的に利用している。
- # 注: var は正しい Python の文法ではない。上記参照のこと
-def f():
-var x # f の local変数 'x' を宣言
-x = 0 # x に 0 を代入
-def g(): # f の内部関数 g を定義
-var x # g の local変数 'x' を宣言
-# たまたま f にも同じ名前の変数があるが、それとは別の変数
-x += 1 # x に 1 を加算 (x = x + 1 の糖衣構文)
-# 加算する前の値を参照しようとするが、まだ代入されていないためエラー
+ # 注: var は正しい Python の文法ではない。上記参照のこと
+def f():
+var x # f の local変数 'x' を宣言
+x = 0 # x に 0 を代入
+def g(): # f の内部関数 g を定義
+var x # g の local変数 'x' を宣言
+# たまたま f にも同じ名前の変数があるが、それとは別の変数
+x += 1 # x に 1 を加算 (x = x + 1 の糖衣構文)
+# 加算する前の値を参照しようとするが、まだ代入されていないためエラー
g()
当初の意図を表現するには、次のように書けばよい。
- def f():
-x = 0
-def g():
-nonlocal x ## (*)
-x += 1
+ def f():
+x = 0
+def g():
+nonlocal x ## (*)
+x += 1
g()
--
cgit v1.2.3-70-g09d2