Python Academy · Lektion

IntEnum och Flag

Använd heltals- och flaggenumereringar

Lektion 2 av 413 steg

IntEnum och Flag är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

Bortom vanlig Enum

Modulen enum levereras med specialiserade basklasser. Medlemmar i IntEnum fungerar som heltal, och medlemmar i Flag kan kombineras med bitvisa operatorer. De täcker fall där vanlig Enum är för begränsad.

Vanlig Enum är inte en int

En medlem i en vanlig Enum kan inte användas omväxlande med sitt heltalsvärde. Om Ni jämför den med ett tal blir resultatet False.

from enum import Enum

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

print(Level.LOW == 1)

IntEnum jämförs som int

En medlem i IntEnum är ett heltal, så den jämförs som lika med sitt numeriska värde och stöder ordning.

from enum import IntEnum

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

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

IntEnum i aritmetik

Eftersom medlemmarna är riktiga heltal kan Ni använda dem i beräkningar och indexering. Använd detta när ett värde verkligen behöver fungera tillsammans med numerisk kod.

from enum import IntEnum

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

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

Sortera IntEnum-medlemmar

Eftersom IntEnum stöder ordning sorteras en lista med medlemmar efter värde utan någon extra nyckelfunktion.

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 för kombinerbara alternativ

En Flag-enum är avsedd för värden som Ni kombinerar. Tilldela tvåpotenser så att varje medlem använder sin egen bit.

from enum import Flag, auto

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

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

Kombinera flaggor med |

Använd den bitvisa OR-operatorn | för att kombinera flaggor till ett enda sammansatt värde.

from enum import Flag, auto

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

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

Kontrollera medlemskap med in

Kontrollera om en flagga är satt med operatorn in, som utför det bitvisa testet åt Er.

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)

Snitt och borttagning

Kombinera flaggor med & (AND) för att hitta gemensamma bitar och ta bort en flagga med & mot komplementet ~.

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 för heltalsflaggor

IntFlag kombinerar båda idéerna: kombinerbara flaggor som också fungerar som vanliga heltal. Det är användbart vid gränssnitt mot C-API:er eller bitmasker som lagras som tal.

from enum import IntFlag, auto

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

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

Iterera över en kombinerad Flag

Om Ni itererar över ett kombinerat Flag-värde får Ni varje enskild flagga som det innehåller, vilket är praktiskt när Ni vill lista aktiva alternativ.

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)

Snabb kontroll

Varför skulle Ni välja en Flag-enum i stället för en vanlig Enum?

Sammanfattning

Ni har lärt Er om heltals- och flagg-enum.

  • Medlemmar i IntEnum fungerar som heltal och stöder ordning och aritmetik.
  • Medlemmar i Flag kombineras med |, & och ~ och testas med in.
  • IntFlag kombinerar båda beteendena.
  • Använd tvåpotenser för flaggvärden.
Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”IntEnum och Flag” gratis?

Ja – hela texten till ”IntEnum och Flag” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”IntEnum och Flag”?

Använd heltals- och flaggenumereringar Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”IntEnum och Flag”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Enum-klassen
  2. IntEnum och Flag
  3. Grunderna i NamedTuple
  4. typing.NamedTuple
← Tillbaka till Python Academy