tryしてreturnしたあとのfinallyについて
タイトルがちょっと意味不明なのですが、こういうことです。
問1. 以下のコードで、ansの値は1と2のどちらでしょうか?
def f(a): try: a = a + 1 return a finally: a = a + 1 ans = f(0) print(ans) # ??
問2. 以下のコードで、ansのlistは、[0, 1]と[0, 1, 2]のどちらでしょうか?
def h(a): try: a.append(1) return a finally: a.append(2) ans = h([0]) print(ans) # ??
問1の答え.
1
問2の答え.
[0, 1, 2]
finallyブロックは実行されてます。
なんでこんなことを考えることになったかというと、ここです。
Memory Allocation — Cython 0.28a0 documentation
mallocしたメモリ領域を、returnした後にfreeしたかったのです。
こんな書き方もあるんだなーって思いました。