Pythonの名前付きタプルの使い方

王林
リリース: 2023-05-02 23:13:05
転載
1526 人が閲覧しました

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

  • Attribute_fields には、('r', 'g', 'b', など) のすべてのフィールドのタプルが含まれます。 'alpha');

  • 属性 __annotations__ には、フィールドと対応する型の辞書が含まれています。たとえば、{'r': 、'g': < などです。 class 'float'>, 'b': < class 'float'>, 'alpha': };

  • Attribute_field_defaults はフィールドを保証します初期値と初期値の辞書を使用: { 'alpha': 0.0} など;

Sort

名前付きタプルの並べ替え: 並べ替えフィールドを指定できます。演算子ライブラリの 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)
ログイン後にコピー

with Dictionary 比較

Dictionary dict は、悪用されやすい非常に一般的なデータ構造ですが、同時に、namedtuple と比較して、次のような特徴があります。問題:

  • 辞書はハッシュ可能ではないため、セットや他の辞書に保存できません;

  • 辞書は変更可能であり、任意の数の辞書を作成できます。必要に応じて新しいキーを追加できます;

#dict と同様に、namedtuple では値を個々の変数に割り当て、必要に応じて使用できます。ただし:

namedtuple は不変であり、新しい値 (キー) が誤って追加されることはありません;

Data Class

データ クラスの詳細については、「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 の継承

継承による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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!