Pythonメモ

その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関連を全部突っ込んだサイズになってるんだと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です