[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軽くしか使っていなかったけど、今となってはゴリゴリ使っている。)
新鮮に聞けて良かったです。