Python Academy · Oppitunti

typing.NamedTuple

Lisää tyyppivihjeet nimettyihin tupletietueisiin

Oppitunti 4/413 vaihetta

typing.NamedTuple on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Tyypitetty vaihtoehto

typing.NamedTuple-yliluokka on moderni, luokkapohjainen tapa määritellä nimettyjä tupleja. Se lisää tyyppivihjeet ja näyttää tavalliselta luokalta, joten useimmat editorit ja tyyppitarkistimet ymmärtävät sen paremmin kuin tehdasfunktiomuodon.

Luokkapohjainen syntaksi

Periytykää NamedTuple-luokasta ja ilmoittakaa jokainen kenttä tyyppimerkinnän avulla. Tuloksena on edelleen aito tuple.

from typing import NamedTuple

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

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

Sama tuplen toiminta

Kaikki tehdasfunktioversiosta tutut ominaisuudet toimivat edelleen: nimen avulla käyttö, indeksin avulla käyttö, purkaminen ja muuttumattomuus.

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)

Oletusarvot suoraan määrittelyssä

Antakaa kentälle oletusarvo määrittämällä arvo suoraan luokan rungossa. Oletusarvollisten kenttien on tultava oletusarvottomien kenttien jälkeen.

from typing import NamedTuple

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

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

Metodien lisääminen

Koska kyseessä on luokka, voitte lisätä siihen oikeita metodeja. Tämä ei onnistu siististi collections.namedtuple-tehdasfunktiolla.

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())

Myös ominaisuudet

Voitte määritellä myös laskettuja ominaisuuksia, jotka johdetaan kenttien arvoista.

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)

Aputoiminnot säilyvät

Tutut tuple-aputoiminnot ovat edelleen käytettävissä: _replace(), _asdict() ja _fields toimivat samalla tavalla.

from typing import NamedTuple

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

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

Tyyppivihjeet dokumentoivat tarkoituksen

Merkintöjä ei valvota ajonaikaisesti, mutta ne dokumentoivat odotetut tyypit ja antavat mypyn kaltaisten työkalujen havaita virheet ennen ohjelman suorittamista.

from typing import NamedTuple

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

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

NamedTuple vai dataclass

Valitkaa niiden välillä seuraavasti:

  • NamedTuple: muuttumaton, tuplen kaltainen, tukee indeksointia ja purkamista.
  • dataclass: oletusarvoisesti muuntuva (tai jäädytetty), ei tue indeksointia ja tarjoaa enemmän määritysvaihtoehtoja.
  • Valitkaa NamedTuple, kun tuplen toiminta on tärkeää, ja dataclass monipuolisempia tietueita varten.

Sisäkkäisyys ja koostaminen

Nimetyt tuplet koostuvat luontevasti toisiinsa. Kenttä voi olla toinen nimetty tuple, jolloin voitte rakentaa rakenteista muuttumatonta dataa.

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)

Funktioiden paluuarvotyyppeinä

Merkitkää funktion paluuarvoksi oma NamedTuple-tyyppinne, jotta editorit tietävät tuloksen kenttien tyypit. Merkintä dokumentoi palautettavan tietueen rakenteen.

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)

Pikakertaus

Mikä on typing.NamedTuple-tyypin etu collections.namedtuple-tehdasfunktioon verrattuna?

Kertaus

Opitte lisäämään tyyppivihjeitä nimettyihin tupleihin.

  • Periytykää typing.NamedTuple-luokasta ja määritelkää kentät tyyppimerkintöineen.
  • Asettakaa oletusarvot suoraan määrittelyssä ja lisätkää metodeja sekä ominaisuuksia.
  • Aputoiminnot _replace, _asdict ja _fields toimivat edelleen.
  • Suosikaa tätä tehdasfunktiota luettavuuden ja työkalujen tuen vuoksi.
Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”typing.NamedTuple” ilmainen?

Kyllä – oppitunnin ”typing.NamedTuple” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”typing.NamedTuple”?

Lisää tyyppivihjeet nimettyihin tupletietueisiin Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”typing.NamedTuple”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Enum-luokka
  2. IntEnum ja Flag
  3. NamedTuple-perusteet
  4. typing.NamedTuple
← Takaisin: Python Academy