Mark Lutz による「Learning Python」で、「関数は、構文的に囲まれた関数とグローバル スコープで割り当てられた名前を自由に使用できますが、それらを変更するには、そのような非ローカルとグローバルを宣言する必要があります」と読みました。Python 2.7 でそれらをテストできませんでした。
def f1():
f1_a = 'f1_a'
def f2():
# global f1_a
# nonlocal f1_a
f2_a = 'f2_a'
print 'f2_a={:s}'.format(f2_a)
print 'f1_a={:s}'.format(f1_a)
f1_a = 'f1f2_a'
f2()
print 'f1_a={:s}'.format(f1_a)
>>> f1()
エラーが発生します:
UnboundLocalError: local variable 'f1_a' referenced before assignment
'global' (NameError: グローバル名 'f1_a' が定義されていません) および 'nonlocal' (非ローカル f1_a 、SyntaxError: 無効な構文) は機能しません。これは、外側の関数で導入された変数を内側の (すぐに囲まれた) ものから変更する方法がないことを意味しますか?