その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モードにしとけばいいって話ですけどね。
その3。ftplibは原始的すぎるなぁと思ってftputilというのをダウンロードしてインストールしたけど、これもWindowsで使うとけっこうダメですね。パスの区切りが「\」にされたりしてmakedirsも失敗する(\文字入りの単一のディレクトリができたりする)し、ファイルライクなオブジェクトがあるけど、そのままEXIFライブラリに食わせるとtellが実装されてないのでだめだった。
その4。ftputilのインストールはbdist_wininstを使って.exeを作って実行してみた。しかしVistaのUACが検出してくれず、普通に実行してもだめだった。やたらにうざいくせにインストーラを検出できないなんて…。右クリックから管理者権限で実行するとインストールできた。「プログラムの追加と削除」でアンインストールできるのは便利だが、「サイズ」のカラムはありえないサイズ(93.1MB)に。他のPythonモジュールも同じ値なので、Python関連を全部突っ込んだサイズになってるんだと思います。