ここでは collections.namedtuple を紹介します。
namedtuple とは、tuple を拡張したもので、変数をまとめるだけの簡単なクラス(のようなもの)を手軽に作成することができます。
型の定義は以下のように行います。
# Pointという名前のnamedtupleを定義。 # 変数としてx, y, zを持つ >>> from collections import namedtuple >>> Point = namedtuple('Point', ... ['x', 'y', 'z'])
このような定義することで、あたかも x, y, z というメンバ変数を持つ Pointクラス(のようなもの)を作成できます。
# Point変数を新規作成 >>> p = Point(10, 20, 30) # x, y, zにメンバ変数のようにアクセスできる >>> p.x 10 >>> p.y 20 >>> p.z 30
注意点として、あくまで tuple ですので要素の変更は許可されません。
# 要素の変更はできない >>> p.x = 11 Traceback (most recent call last): File "", line 1, in AttributeError: can't set attribute
要素を変更したい場合、変更そのものはできないので、変数の新規作成を行う必要があります。
型名を指定して新規作成する方法と、_replace()を利用する方法があります。
# 新規作成で x のみ変更 >>> p = Point(11, p.y, p.z) >>> p Point(x=11, y=20, z=30) # _replace()で x のみ変更した値を再代入 >>> p = p._replace(x=12) >>> p Point(x=12, y=20, z=30)
クラスと比べるとずっと手軽に定義でき、list や tuple と比べると要素の意味が把握しやすい、というのが namedtuple の特徴と言えます。
クラスを定義するほどでもない小さなデータをまとめる場合に便利です。是非使いこなしましょう。
0 件のコメント:
コメントを投稿