Python Academy · Oppitunti

IntEnum ja Flag

Käytä kokonaisluku- ja lippuluetteloita

Oppitunti 2/413 vaihetta

IntEnum ja Flag on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.

Tavallisen Enumin lisäksi

enum-moduuli sisältää erikoistuneita kantaluokkia. IntEnum-jäsenet toimivat kuten kokonaisluvut, ja Flag-jäsenet voidaan yhdistää bittikohtaisilla operaattoreilla. Ne sopivat tilanteisiin, joissa tavallinen Enum on liian rajoittava.

Tavallinen Enum ei ole int

Tavallista Enum-jäsentä ei voi käyttää vaihdellen sen kokonaislukuarvon kanssa. Kun sitä verrataan lukuun, tulos on False.

from enum import Enum

class Level(Enum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)

IntEnum vertautuu kokonaislukuna

IntEnum-jäsen on kokonaisluku, joten se on yhtä suuri kuin numeerinen arvonsa ja tukee järjestysvertailua.

from enum import IntEnum

class Level(IntEnum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)
print(Level.LOW < Level.HIGH)

IntEnum aritmetiikassa

Koska jäsenet ovat oikeita kokonaislukuja, niitä voi käyttää laskutoimituksissa ja indeksoinnissa. Käyttäkää tätä, kun arvon on todella toimittava yhdessä numeropohjaisen koodin kanssa.

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

print(Priority.HIGH + 1)
print(Priority.MEDIUM * 2)

IntEnum-jäsenten lajittelu

Koska IntEnum tukee järjestysvertailua, jäsenluettelon voi lajitella arvon mukaan ilman ylimääräistä avainfunktiota.

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

for p in sorted([Priority.HIGH, Priority.LOW, Priority.MEDIUM]):
    print(p.name)

Flag yhdisteltäville asetuksille

Flag-enum on tarkoitettu yhdisteltäville arvoille. Määrittäkää arvoiksi kahden potensseja, jotta kukin jäsen käyttää omaa bittiään.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

print(Permission.READ)
print(Permission.READ.value)

Flagien yhdistäminen operaattorilla |

Käyttäkää bittikohtaista TAI-operaattoria | yhdistämään liput yhdeksi yhdistelmäarvoksi.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(access)

Jäsenyyden tarkistaminen operaattorilla in

Tarkistakaa, onko lippu asetettu, käyttämällä in-operaattoria, joka suorittaa bittitestin puolestanne.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(Permission.READ in access)
print(Permission.EXECUTE in access)

Leikkaus ja poistaminen

Yhdistäkää liput operaattorilla & (JA) yhteisten bittien löytämiseksi ja poistakaa lippu käyttämällä operaattoria & komplementin ~ kanssa.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
still = access & ~Permission.WRITE
print(still)

IntFlag kokonaislukulipuille

IntFlag yhdistää molemmat ideat: yhdisteltävät liput, jotka toimivat myös tavallisten kokonaislukujen tavoin. Tämä on hyödyllistä käytettäessä C-rajapintoja tai lukuina tallennettuja bittimaskeja.

from enum import IntFlag, auto

class Mode(IntFlag):
    R = 4
    W = 2
    X = 1

m = Mode.R | Mode.W
print(int(m))

Yhdistetyn Flag-arvon läpikäynti

Yhdistetyn Flag-arvon läpikäynti tuottaa jokaisen sen sisältämän yksittäisen lipun, mikä on kätevää aktiivisten asetusten luettelemiseen.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.EXECUTE
for p in access:
    print(p.name)

Pikatarkistus

Miksi valitsisitte Flag-enumin tavallisen Enum-enumin sijaan?

Kertaus

Opitte käyttämään kokonaisluku- ja lippu-enumeita.

  • IntEnum-jäsenet toimivat kuten kokonaisluvut ja tukevat järjestysvertailua sekä aritmetiikkaa.
  • Flag-jäsenet yhdistetään operaattoreilla |, & ja ~, ja niiden jäsenyyttä tarkistetaan operaattorilla in.
  • IntFlag yhdistää molemmat toimintatavat.
  • Käyttäkää lippuarvoina kahden potensseja.
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 ”IntEnum ja Flag” ilmainen?

Kyllä – oppitunnin ”IntEnum ja Flag” 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 ”IntEnum ja Flag”?

Käytä kokonaisluku- ja lippuluetteloita 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 2/4.

Kuinka kauan ”IntEnum ja Flag”-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