Python Academy · Pelajaran

typing.NamedTuple

Tambahkan petunjuk jenis pada tuple bernama

Pelajaran 4 daripada 413 langkah

typing.NamedTuple ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Python Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Python Academy merangkumi sejumlah 4 pelajaran.

Alternatif Bertip

Kelas asas typing.NamedTuple ialah cara moden berasaskan kelas untuk mentakrifkan tupel bernama. Ia menambahkan petunjuk jenis dan kelihatan seperti kelas biasa, yang lebih mudah difahami oleh kebanyakan penyunting dan penyemak jenis berbanding bentuk kilang.

Sintaks Berasaskan Kelas

Subkelas NamedTuple dan isytiharkan setiap medan dengan anotasi jenis. Hasilnya masih merupakan tupel sebenar.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

p = Point(1, 2)
print(p)

Tingkah Laku Tupel yang Sama

Segala-galanya daripada versi kilang masih berfungsi: capaian nama, capaian indeks, pembongkaran dan ketidakbolehubahan.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

p = Point(1, 2)
print(p.x, p[1])
x, y = p
print(x, y)

Nilai Lalai Sebaris

Berikan medan nilai lalai dengan hanya menetapkan nilai dalam badan kelas. Medan yang mempunyai nilai lalai mesti diletakkan selepas medan tanpa nilai lalai.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int
    z: int = 0

print(Point(1, 2))
print(Point(1, 2, 9))

Menambah Kaedah

Oleh sebab ia merupakan kelas, Anda boleh menambah kaedah sebenar. Perkara ini tidak dapat dilakukan dengan kemas oleh kilang collections.namedtuple.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

    def distance_sq(self):
        return self.x ** 2 + self.y ** 2

print(Point(3, 4).distance_sq())

Sifat Juga

Anda juga boleh mentakrifkan sifat terhitung yang mendapatkan nilai daripada medan.

from typing import NamedTuple

class Rectangle(NamedTuple):
    width: int
    height: int

    @property
    def area(self):
        return self.width * self.height

print(Rectangle(3, 4).area)

Kaedah Bantuan Kekal Tersedia

Kaedah bantuan tupel yang biasa masih tersedia: _replace(), _asdict() dan _fields semuanya berfungsi dengan cara yang sama.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

p = Point(1, 2)
print(p._asdict())
print(p._replace(x=9))

Petunjuk Jenis Mendokumenkan Tujuan

Anotasi tidak dikuatkuasakan semasa waktu jalan, tetapi anotasi tersebut mendokumenkan jenis yang dijangka dan membolehkan alat seperti mypy mengesan kesilapan sebelum Anda menjalankan atur cara.

from typing import NamedTuple

class Employee(NamedTuple):
    name: str
    salary: float
    active: bool = True

e = Employee('Alice', 5000.0)
print(e)

NamedTuple berbanding Kelas Data

Panduan untuk memilih antara kedua-duanya:

  • NamedTuple: tidak boleh diubah, menyerupai tupel, menyokong pengindeksan dan pembongkaran.
  • kelas data: boleh diubah secara lalai (atau dibekukan), tiada pengindeksan, lebih banyak pilihan konfigurasi.
  • Pilih NamedTuple apabila tingkah laku tupel penting; pilih kelas data untuk rekod yang lebih kaya.

Penyarangan dan Gubahan

Tupel bernama dapat digubah dengan baik. Sesuatu medan boleh menjadi tupel bernama yang lain, lalu membina data berstruktur yang tidak boleh diubah.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

class Line(NamedTuple):
    start: Point
    end: Point

line = Line(Point(0, 0), Point(3, 4))
print(line.end.y)

Sebagai Jenis Pulangan Fungsi

Anotasikan fungsi supaya memulangkan NamedTuple Anda agar penyunting mengetahui jenis medan hasil tersebut. Anotasi itu mendokumenkan bentuk rekod yang dipulangkan.

from typing import NamedTuple

class Stats(NamedTuple):
    minimum: int
    maximum: int

def analyze(nums) -> Stats:
    return Stats(min(nums), max(nums))

r = analyze([5, 2, 8])
print(r.minimum, r.maximum)

Semakan Pantas

Apakah kelebihan typing.NamedTuple berbanding kilang collections.namedtuple?

Imbas Kembali

Anda telah mempelajari cara menambah petunjuk jenis pada tupel bernama.

  • Subkelas typing.NamedTuple dengan medan beranotasi.
  • Tetapkan nilai lalai sebaris; tambahkan kaedah dan sifat.
  • Kaedah bantuan _replace, _asdict dan _fields masih berfungsi.
  • Utamakannya berbanding kilang untuk kebolehbacaan dan sokongan alat.
Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
76
Pelajaran
320

Soalan Lazim

Adakah pelajaran “typing.NamedTuple” percuma?

Ya — teks penuh “typing.NamedTuple” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Python Academy, tingkat taraf kepada CoddyKit PRO. Kursus Python Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “typing.NamedTuple”?

Tambahkan petunjuk jenis pada tuple bernama Anda berlatih Python Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Python Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Python Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “typing.NamedTuple” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Kelas Enum
  2. IntEnum dan Flag
  3. Asas NamedTuple
  4. typing.NamedTuple
← Kembali ke Python Academy