その1。ジェネレータは再帰で書けない。以下のサンプルは動きません。1回しかyieldしてくれない。
def mygen(n):
if n<=0: return
yield n
mygen(n-1)
以下もダメ。
def mygen2(n):
if n<=0: return
mygen2(n-1)
yield n
多重ループもだめかも。意外と不便ですね。どういうしくみだと考えれば妥当な挙動と思えるのかなぁ。
その2。Windowsの場合はファイルを開くのにbinaryモードとtextモードの区別が必要。Pythonの場合、デフォルトはreadでtextなのですね。Linuxの頃は意識しなくても良かったのに。JPEGを開いてEXIF情報を読もうとして失敗したり、ftplibでアップロードしようとして途中までしかアップロードできなかったり。しばらくの間、原因が分かりませんでした。EOF(^Z)に遭遇したところでread()が終了してしまったんでしょう。このひどいデザインがまだ生きているとは…確かにDOSの頃はそうだったような記憶もあるけどさ。Windowsでプログラムを組むってのは、大変ですね。Pythonの処理系がデフォルトでbinaryモードにしとけばいいって話ですけどね。