名前付きタプル
タプルのサブクラス
位置(offset)だけでなく、名前(.name)でもアクセスできる
サンプルDuckクラスを名前付きタプルに変換してみる
この名前付きタプルは、文字列属性としてbillとtailを持つ、
namedtuple関数には、ふたつの引数を渡す。
○名前
○空白区切りのフェールド名の文字列
名前付きタプルはPythonが自動的に供給するデータ構造ではないので、
モジュールをロードしなければならない。
from collection import namedtuple
Duck = namedtyple('Duck', 'bill tail')
duck = Duck('wide orange', 'long')
duck
Duck(bill='wide oramge', 'long')
< br>
duck.bill< br>
'wide oramge'< br>
duck.tail< br>
'long'< br>
< br>
< br>
名前付きタプルを辞書から作る
parts = ('bill': 'wide orange', 'tail': 'long')
duck2 = Duck(**parts)
duck2
Duck(bill='wide orange', tail = 'long')
上のコードでは、**partsに注意しよう。これはキーワード引数だ。
**partsはparts辞書のキーと値を抽出してDuck()に引数として渡す。
次のように書くのと同じ意味になる
duck2 = Duck(bill = 'wide orange', tail = 'long')
名前付きタプルはイミュウータブルだが、1個以上のフィールドを交換
した別の名前付きタプルを返す事はできる
duck3 = duck2._replace(tail='magnificent', bill='crushing')
duck3
Duck(bill='crushing', tail='magnificent')
duckは辞書として定義することもできただろう
duct_dict = ('bill': 'wide orange', 'tail': 'long')
duct_dict
{'tail': 'long', 'bill': 'wide orange'}
辞書にはフィールドを追加できる
duct_dict['color'] = 'green'
duct_dict
{'color': 'green', 'tail': 'long', 'bill': 'wide orange'}
しかし、名前付きタプルには追加できない
名前付きタプルの長所
○イミュタブルなオブジェクトのように振る舞う
○オブジェクトよりも空間的、時間的に効率が良い
○辞書スタイルの角かっこではなく。ドット記法で属性にアクセスできる
○辞書のキーとして使える