現在地: ホーム Dive Into Python 3

“Dive Into Python 3” で新しくなったこと

始まりは、ここから?
— Pink Floyd, The Wall

 

またの名を「負のレベル」

すでにPythonのプログラムを書いたことがある? 前版の「Dive Into Python」を読んだことがある? ひょっとして書籍版も買ってくれた?(ありがとう!)もうPython 3に飛び込む準備ができているって? …… もしそうなら、この章を読み続けてほしい(まったく当てはまらないのなら、最初から始めるのが良いだろう)。

Python 3には2to3というスクリプトが付属している。これを学び、これを愛し、これを使おう。2to3を使ってコードをPython 3へ移植するは、2to3で自動的に何が修正できるのかを全て集めたレファレンスとなっている。その多くは構文の変更なので(printは今や関数であり、`x`はもう使えない、などなど)、この章はPython 3でなされた多くの構文の変更について学ぶ良い足がかりになる。

ケーススタディ: chardetをPython 3へ移植するは、ある程度の規模をもつライブラリを私がPython 2からPython 3へ移植したときの(最終的には成功した)努力の模様を文書にしたものだ。これは皆さんの助けになるかもしれないし、ならないかもしれない。この章を理解するには、始めにこのライブラリのことをそれなりに理解しなければならないため、学習曲線はかなり急なものになるが、その代わりにこのライブラリがなぜPython 3で動かなくなったのか、そしてそれを私がどうやって修正したのかを理解できるようになるだろう。この動かなくなった部分の多くは文字列に関係しているが、文字列といえば……

文字列。ふぅ、ここが始まりだ。Python 2には「文字列」と「ユニコード文字列」があったが、Python 3には「バイト列」と「文字列」の二つがある。要するに、今や文字列というのはすべてユニコード文字列であり、バイトのかたまりを扱いたい場合には、新たに導入されたbytes型を使うことになる。Python 3は、文字列とバイト列の変換を暗黙には決して行わないので、扱っているものが文字列なのかそれともバイト列なのかを常にしっかり把握していなければ、コードはほぼ確実に動かないものになるだろう。詳しくは文字列の章を読んでほしい。

バイト列と文字列の違いの問題はこの本を通して何度となく現れる。

Unicodeのことを気にかけていないとしても(でも気にすることになるよ)、Python 3の文字列フォーマットについての説明は読みたいと思う。これはPython 2からすっかり変わってしまっている。

イテレータはPython 3のいたるところにある。そして、私が五年前に“Dive Into Python”を書いていた頃よりも、私はイテレータをずっと良く理解している。皆さんもこれを理解しなければならない。というのは、Python 2においてリストを返していた関数の多くは、Python 3ではイテレータを返すようになっているからだ。少なくとも、イテレータの章の後半高度なイテレータの章の後半は読んでほしい。

たくさんの要望があったので、特殊メソッド名についてのAppendixを追加することにした。これはPython公式ドキュメントの「データモデル」の章のようなものだが、もっと皮肉が効いている。

前版の「Dive Into Python」を書いていた頃に利用できたXMLライブラリはすべてひどいものだった。その後、Fredrik LundhがElementTreeというものを作ったのだが、これは良くできた代物だった。Pythonの神々たちは賢明にもElementTreeを標準ライブラリに組み込んだので、今やこれが新しいXMLの章の基盤になっている。古いやり方でXMLを扱うこともできるけれど、それはやめたほうが良い。まったくそいつらはひどいものだから!

そのほかにPythonの世界で新しく起きたこととしては、(言語ではなく、コミュニティに関するものだけど)Python Package Index (PyPI) のようなコードリポジトリの登場が挙げられる。Pythonには、コードを標準形式でパッケージ化し、それをPyPI上で配布するためのユーティリティが付属している。詳しくはPythonライブラリをパッケージ化するを読んでほしい。

© 2001– Mark Pilgrim
© Fukada, Fujimoto(日本語版)