コレクション型のリテラル表記
リテラル表記については
pythonのコレクション型のインスタンスを生成するには、コンストラクタの他にリテラル表記を使う事ができる。
っていうか、コレクション型の値をリテラル表記で直接,記述できるって事。
今回は、以前の記事, 「is演算子と==演算子と特殊メソッド__eq__ - 愚鈍人」の補足としてコレクション型のリテラル表記についてまとめてみた。
コレクション型のコンストラクタ
組み込み型のコンストラクタは、見た目,組み込み関数のような感じに見えることから、公式ドキュメントでは組み込み関数として分類されている。
そして、それは組み込みのコレクション型のコンストラクタについても同様である。
公式ドキュメントより、主なコレクション型のコンストラクタのシグネチャ を列挙すると
- タプル型
- tuple([iterable])
- リスト型
- list([iterable])
- 辞書型
- dict(kwarg),dict(mapping, kwarg),dict(iterable, **kwarg)
- 集合型
- set([iterable]),frozenset([iterable])
コレクション型のコンストラクタにはiterableなオブジェクトを引数にとるものが多い。
そして、そのiterableなオブジェクトとして他のコレクション型のオブジェクトがおもに使われる。
コレクション型のコンストラクタは他のコレクション型から別のコレクション型への変換関数の役割を果たす事になる。
# iterableなオブジェクトをここではタプルを用意。 iterable_object = (1, 2, 3) # タプルからタプルクラスのインスタンスを生成 x = tuple(iterable_object) print x # タプルからリスト x = list(iterable_object) print x # 集合型 x = set(iterable_object) print x
実行結果
(1, 2, 3) [1, 2, 3] set([1, 2, 3])
辞書型の場合はやや特別で
# タプルから辞書型 iterable_object1 = ("tuple_key1", "tuple_value1") iterable_object2 = ("tuple_key2", "tuple_value2") iterable_object3 = ("tuple_key3", "tuple_value3") iterable_object_list = (iterable_object1, iterable_object2, iterable_object3) x = dict(iterable_object_list) print x
実行結果
{'tuple_key1': 'tuple_value1', 'tuple_key2': 'tuple_value2', 'tuple_key3': 'tuple_value3'}
辞書型のコンストラクの引数の指定の仕方はいろいろあるので
# dict(kwarg)の例 x = dict(kwarg1="value1", kwarg2="value2", kwarg="value3") print x # dict(mapping, kwarg)の例 mapping = {"dict_key1":"dict_value1", "dict_key2":"dict_value2", "dict_key3":"dict_value3"} x = dict(mapping, kwarg1="value1", kwarg2="value2", kwarg="value3") print x # dict(iterable, **kwarg)の例 x = dict(iterable_object_list, kwarg1="value1", kwarg2="value2", kwarg="value3") print x
実行結果
{'kwarg': 'value3', 'kwarg1': 'value1', 'kwarg2': 'value2'} {'kwarg': 'value3', 'kwarg1': 'value1', 'kwarg2': 'value2', 'dict_key1': 'dict_value1', 'dict_key3': 'dict_value3', 'dict_key2': 'dict_value2'} {'kwarg': 'value3', 'kwarg1': 'value1', 'kwarg2': 'value2', 'tuple_key1': 'tuple_value1', 'tuple_key2': 'tuple_value2', 'tuple_key3': 'tuple_value3'}
リテラル表記
コレクション型のコンストラクタを使うには、あらかじめiterableなオブジェクトを用意する必要がある。
これに対して、リテラル表記を使うと直値(イミディエイトな値)を指定した簡潔な表記の仕方が可能になる。
コレクション型のリテラル表記の例を以下に示す。
# タプル x = ("a", "b", "c") # リスト x = {"a", "b", "c"} # 辞書型 x = {"key1":"value1", "key2":"value2", "key3":"value3"} # 集合型 x = {"a", "b", "c"};
多分、コレクション型のコンストラクタを使ってインスタンスを生成する必要はほとんど無いだろう。