Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan python bernama tupel

Cara menggunakan python bernama tupel

王林
王林ke hadapan
2023-05-02 23:13:051490semak imbas

collections.namedtuple digunakan untuk membina tupel dengan nama medan. Jenis yang sepadan ialah menaip.NamedTuple (boleh digunakan sebagai superclass).

Tuple bernama

Takrif objek bernamatuple:

collections.namedtuple(typename, field_names, verbose=False, rename=False, defaults=None, module=None) :

  • nama taip: nama tuple

  • nama_medan: ialah jujukan medan (cth., [‘x’, ‘y’]) ;

  • nama semula: Apabila benar, jika nama medan tidak sah (contohnya, nama pendua atau kata kunci digunakan), ia akan digantikan secara automatik dengan nama kedudukan (contohnya, _1) ;

  • lalai: Nilai lalai medan itu, ia sepadan dengan nilai lalai medan dalam

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)

Daripada objek boleh lelar (Iterable ) Bina tuple bernama:

c = Color._make([10, 20, 30, 0.1])
nc = Color._make((10, 20, 30, 0.1))

print("r:", c.r)

Operasi Tuple

Pengubahsuaian tuple bernama: Nilai di dalamnya tidak boleh diubah suai secara langsung, dan nilai baharu boleh dibina melalui _replace:

c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
nc = c._replace(r=100)

Tukar kamus kepada tuple bernama:

c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
nc = Color(**c)

Tukar tuple bernama kepada kamus (melalui kaedah _asdict):

c = Color(r=50, g=0, b=0, alpha=0.5)
d = c._asdict()

Tukar tuple bernama kepada tuple:

c = Color(r=50, g=0, b=0, alpha=0.5)
t = tuple(c)

Atribut

  • Attribute_fields mengandungi tuple semua medan: seperti ('r', 'g', 'b', 'alpha'); >

  • Atribut __anotasi__ mengandungi kamus medan dan jenis yang sepadan: seperti {'r': e13446bebb88208a1ed1b67eb6c71d15, 'g': e13446bebb88208a1ed1b67eb6c71d15 , 'b': a4ea56dad30a63eb7470d3db29fef0b7, 'alpha': e13446bebb88208a1ed1b67eb6c71d15};

  • Attribute _field_defaults menjamin medan dengan nilai awal dan kamus nilai awal: seperti { 'alpha': 0.0};

Isih

Isih tuple bernama: Medan isihan boleh ditentukan melalui attrgetter dalam perpustakaan operator:

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)

dan perbandingan kamus

Dict kamus ialah struktur data yang sangat umum yang mudah disalahgunakan Pada masa yang sama, berbanding dengan namedtuple, ia mempunyai masalah berikut:

  • Kamus tidak boleh dicincang, Jadi ia tidak boleh disimpan dalam set atau kamus lain

  • Kamus boleh diubah dan sebarang bilangan kunci baharu boleh ditambah; seperti yang diperlukan;

Serupa dengan dict, dalam nametuple nilai boleh diberikan kepada pembolehubah tunggal dan digunakan seperti yang diperlukan. Walau bagaimanapun:

namedtuple tidak boleh diubah dan nilai baharu (kunci) tidak akan ditambah secara tidak sengaja; Kelas (dataclass)" Pengenalan".

pengubahsuaian kelas data

Kelas Data telah diperkenalkan dalam python3.7, yang boleh dianggap sebagai "pembolehubah bernamatuple dengan nilai lalai":

boleh tambah dokumen dengan mudah;

  • boleh mentakrifkan medan pilihan; (pada masa yang sama, nilai awal medan boleh ditakrifkan dan medan dengan nilai awal mesti mengikut medan bukan permulaan):

    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)

Atas ialah kandungan terperinci Cara menggunakan python bernama tupel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam