2019年5月10日金曜日

Python のClosure

Python では入れ子になった関数では外側の変数が見えるのだけど、そのままだと更新はできない。でもPython3ではnonlocalとして宣言することで更新可能になる。
>>> def genCounter():
...     c = 0
...     def inc():
...         nonlocal c
...         c += 1
...         return c
...     return inc
... 
>>> c = genCounter()
>>> c
<function genCounter.<locals>.inc at 0x10fa58598>
>>> c()
1
>>> c()
2
面倒くさい。。

0 件のコメント: