ホームページ >バックエンド開発 >Python チュートリアル >Pythonの名前付きタプルの使い方
collections.namedtuple は、フィールド名を含むタプルを構築するために使用されます。対応する型は testing.NamedTuple (スーパークラスとして使用可能) です。
名前付きタプル オブジェクトの定義:
collections.namedtuple(typename, field_names,verbose=False, rename=False,defaults=None, module=None) :
typename: タプル名
field_names: フィールド シーケンス (例: [‘x’, ‘y’]) ;
rename: true の場合、フィールド名が無効な場合 (たとえば、同じ名前を持つ、またはキーワードを使用する) は、自動的に位置名 (たとえば、_1) に置き換えられます。 ;
defaults: フィールドのデフォルト値。反復可能なオブジェクトの場合、field_names のフィールドのデフォルト値に対応します。
from collections import namedtuple Color = namedtuple("Color", "r g b alpha") def convert_to_color(desc: str, alpha: float = 0.0): if desc == "green": return Color(r=50, g=205, b=50, alpha=alpha) elif desc == "blue": return Color(r=50, g=0, b=255, alpha=alpha) else: return Color(r=50, g=0, b=0, alpha=alpha)
反復可能オブジェクトから (Iterable) 名前付きタプルを構築します:
c = Color._make([10, 20, 30, 0.1]) nc = Color._make((10, 20, 30, 0.1)) print("r:", c.r)
名前付きタプルの変更: 内部の値は直接変更できず、新しい値を作成します。 _replace を通じて構築できます:
c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5} nc = c._replace(r=100)
辞書を名前付きタプルに変換します:
c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5} nc = Color(**c)
名前付きタプルを辞書に変換します (_asdict メソッド経由):
c = Color(r=50, g=0, b=0, alpha=0.5) d = c._asdict()
Convert名前付きタプルからタプルへ:
c = Color(r=50, g=0, b=0, alpha=0.5) t = tuple(c)
Attribute_fields には、('r', 'g', 'b', など) のすべてのフィールドのタプルが含まれます。 'alpha');
属性 __annotations__ には、フィールドと対応する型の辞書が含まれています。たとえば、{'r': e13446bebb88208a1ed1b67eb6c71d15、'g': 3cdc08f0c99a0b28cf50fa2b918827b4, 'b': 15fe1a1f411018ce39706d720ae2d2a8, 'alpha': e13446bebb88208a1ed1b67eb6c71d15};
Attribute_field_defaults はフィールドを保証します初期値と初期値の辞書を使用: { 'alpha': 0.0} など;
名前付きタプルの並べ替え: 並べ替えフィールドを指定できます。演算子ライブラリの attrgetter を介して:
from operator import attrgetter colors = [ Color(r=50, g=205, b=50, alpha=0.1), Color(r=50, g=205, b=50, alpha=0.5), Color(r=50, g=0, b=0, alpha=0.3) ] out = sorted(colors, key=attrgetter("alpha")) print(out)
Dictionary dict は、悪用されやすい非常に一般的なデータ構造ですが、同時に、namedtuple と比較して、次のような特徴があります。問題:
辞書はハッシュ可能ではないため、セットや他の辞書に保存できません;
辞書は変更可能であり、任意の数の辞書を作成できます。必要に応じて新しいキーを追加できます;
#dict と同様に、namedtuple では値を個々の変数に割り当て、必要に応じて使用できます。ただし:
namedtuple は不変であり、新しい値 (キー) が誤って追加されることはありません;
データ クラスの詳細については、「Data」を参照してください。クラス(データクラス)の「はじめに」。
データ クラス (データ クラス) は python3.7 で導入されました。これは、「デフォルト値を持つ変数の名前付きタプル」と見なすことができます:
ドキュメントを簡単に追加できます;
オプションのフィールドを定義できます;
from dataclasses import dataclass # frozen设为true后,字段内容将不允许修改(与namedtuple完全类似) # 否则可修改字段;并可任意添加字段(如,c.n=1); @dataclass(frozen=True) class DColor: """A regular class that represents a color.""" r: float g: float b: float alpha: float = 0.0 # c = DColor(r=10, g=20, b=30) c = DColor(10, 20, 30)
継承によるNamedTuple も簡単に定義できます (同時にフィールドの初期値も定義でき、初期値を持つフィールドは初期値以外のフィールドの後に続く必要があります):
from typing import NamedTuple class NColor(NamedTuple): """A namedtuple that represents a color.""" r: float g: float b: float alpha: float = 0.0 nc = NColor(100, 110, 120)
以上がPythonの名前付きタプルの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。