[python] 標準ライブラリに学ぶ、Python3移行のポイント by ふるかわとおる氏

BPStudy#27で、ふるかわとおるさんによるPython 3の話を聞いてきました。


BPStudy#27
株式会社ビープラウドが主催するWeb系技術討論の会
EBISU303 405会議室
2009/11/20 20:30 -
http://atnd.org/events/2043


内容は、Python CodeReading 08の内容と基本同じで、少し修正、追加があります。
バッテリーが持たない状況だったので助かりました。(ふるかわさんには悪いが)


Python CodeReading 08時の自分の記事はこれ
標準ライブラリに学ぶ Python 3.0移行のポイント
http://d.hatena.ne.jp/taku-o/20090312/1236875384


以前、同じ内容に対して記事を書いているので、今回新しく感じたこと、考えた事だけ書きます。

print文

まず、print文の書き方の変化。
print文は、他のメソッドの書き方と合わせて、括弧付きで書くことに。

# version 2.X
print ...
print ...,
print >>stream, ...
# version 3.X
print(...)
print(..., end='')

やはり、バージョン3の書き方は面倒くさい。特に改行無しで出力する場合。
改行無し出力を多用する場合は、何かメソッドを挟んで手間を軽減する必要があるかも。

bytesとstr

version 3からは、Unicodeベースで文字列が管理されるようになり、それに伴い、いろいろ変わった。


エンコーディングの変換は、入力、出力の境目でやれば良いことになるけど、
アプリケーションの作りによっては、入力出力間で、どのエンコーディングを使っているかの情報を持ち歩く必要があって、
設計にちょっと影響が出る場合もあるかもしれませんね。
str型でなく、bytes型で持ち歩くって方法もあるけど、途中で処理を差し込む場合に面倒になるから、自分的にはなるべく避けたいかな。


ただ、処理中に、妙な状態の文字列を持ち運ばれなくなるので、
我々アスキー以外も使う人種にとっては、文字コードトラブルの発生が今より少なくなる、良い変更だと思います。

with構文

3.1からの構文。
ネストした構造をきれいに扱えるようになるwith構文が導入される。

with value_A as alias_A
    with value_B as alias_B

3.0と3.1の間に互換性がない

3.1のコードを3.0の実行環境に持って行っても動作しない。
いや、でも、3.0のコードは3.1の環境で動くように見えるので、大きな問題ではないでしょう。
もしかして動かない?これは後で調べよう。
バージョン3はまだ本格的に使われる状況になっていないし、プログラムの文法変えるなら今のうちでしょうな。

感想

内容は基本以前と同じだったけれど、聴く側の自分が以前とは同じではないので、
(前聴いたことはPython軽くしか使っていなかったけど、今となってはゴリゴリ使っている。)
新鮮に聞けて良かったです。