もっと知りたいPython3000

第2回 組み込み型への変更

この記事を読むのに必要な時間:およそ 2 分

辞書型への変更

辞書型に関しては,メソッドに変更が加わります。

Python 3.0では,辞書のキーを検査するためのhas_key()というメソッドが取り除かれます。2.x,3.0の互換性を保ちながらキーを検査するためには,'key' in dのようにin演算子を使います。

また,2.xまでは,キーの一覧を返すkeys()値の一覧を返すvalues()キーと値のペアを返すitems()というメソッドは,要素のコピーを作ってリストにして戻り値としていました。Python 3.0では,ビュー(view)と呼ばれるより粒度の低いイテレータ風のオブジェクトを返すように変更されます。

このため,以下のようにリストが返ることを期待したコードは3.0では動かなくなります。次のコードは,辞書の値を元に辞書の要素をソートしています。

>>> d=dict(a=1, b=2, c=0)
>>> i=d.items()
>>> i.sort(lambda x, y: cmp(x[1], y[1]))
>>> i
[('c', 0), ('a', 1), ('b', 2)]

Python 2.x,3.0両方で動くようなコードを書くには,組み込み関数sorted()を使うと良いでしょう。sorted()はPython 2.4から追加された組み込み関数で,リストやイテレータなどをソートした結果を返します。

>>> d=dict(a=1, b=2, c=0)
>>> i=sorted(d.items(), lambda x, y:cmp(x[1], y[1]))
>>> i
[('c', 0), ('a', 1), ('b', 2)]

リストを返していたメソッドがイテレータ風のオブジェクトを返すような変更は,辞書型のメソッドだけでなくPython全般にわたって実施されます。辞書以外の変更点の詳細については,次回の記事でも取り上げる予定です。

その他の変更

これまで,Pythonには2進数を扱うための簡易な方法が充実てしいませんでした。int('1010', 2)のようにして,2進数相当の文字列を整数に変換できるのみでした。

Python 3.0では,2進数を表記するための0b1010というリテラルが追加されます。また,整数を2進数相当の文字列に変換する組み込み関数bin()が追加されます。bin()の戻り値は,2進数のリテラル表記と同じ0bから始まる文字列となります。なお,8進数のリテラル表記も2進数にならい,0666から0o666のように変更になります。数字のゼロとアルファベットの「o(オー)」に続けて数値を記述するわけです。

Python 2.3から追加されたset型という組み込み型があります。set型は「集合型」とも呼ばれ,重複しない一意の要素を格納できるリストに似たデータ型です。

これまでは,set型を生成するにはset([1, 2, 3])というような表記をする必要がありました。Python 3.0では,set型にリテラル表記が追加されます。辞書のリテラルのように波括弧で要素を囲み,{1, 2, 3}のように表記します。

次回は,Pythonの言語仕様や組み込み関数,クラス,標準ライブラリに加えられる予定の変更点についてお伝えします。

著者プロフィール

柴田淳(しばたあつし)

Webcore株式会社代表取締役。Python,Ploneを使ったCMS/システム構築やコンサルティングが主な業務となっています。「みんなのPython」「TurboGears×Python」などの著書があります。日本Pythonユーザ会のほか,日本PostgreSQLユーザ会でも活動。

URLhttp://coreblog.org/ats/

著書