Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Aufzählungstypen in Python (Codebeispiele)

Detaillierte Erläuterung der Aufzählungstypen in Python (Codebeispiele)

不言
不言nach vorne
2018-12-11 10:15:093504Durchsuche

Dieser Artikel enthält eine detaillierte Erklärung (Codebeispiel) der Aufzählungstypen in Python. Ich hoffe, dass er für Freunde hilfreich ist.

Die nativen Typen von Python enthalten keine Aufzählungstypen. Um eine bessere Lösung zu bieten, hat Python die Enum-Standardbibliothek in Version 3.4 über PEP 435 hinzugefügt.

Der Aufzählungstyp kann als Beschriftung oder Sammlung von Konstanten betrachtet werden, die normalerweise zur Darstellung bestimmter begrenzter Sammlungen wie Wochentage, Monate, Status usw. verwendet werden. Was machen wir, wenn es keinen speziell bereitgestellten Aufzählungstyp gibt? Im Allgemeinen wird er über ein Wörterbuch oder eine Klasse implementiert:

Color = {
    'RED'  : 1,
    'GREEN': 2,
    'BLUE' : 3,
}
class Color:
    RED   = 1
    GREEN = 2
    BLUE  = 3

Diese Art der Aufzählung ist bei sorgfältiger Verwendung natürlich kein Problem. es ist eine Kompromisslösung. Die Gefahr besteht darin, dass es geändert werden kann.

Verwenden Sie Enum

Eine bessere Möglichkeit ist die Verwendung des von der Standardbibliothek bereitgestellten Typs Enum. Die offizielle Bibliothek ist vertrauenswürdig. Versionen vor 3.4 können unterstützte Bibliotheken auch über pip install enum herunterladen. Einfaches Beispiel:

from enum import Enum
class Color(Enum):
    red = 1
    green = 2
    blue = 3

Aufzählungsmitglieder haben Werte (standardmäßig wiederholbar) und Aufzählungsmitglieder haben benutzerfreundliche Zeichenfolgendarstellungen:

>>> print(Color.red)
Color.red
>>> print(repr(Color.red))
<Color.red: 1>
>>> type(Color.red)
<Enum &#39;Color&#39;>
>>> isinstance(Color.green, Color)
True

Aufzählungstypen sind nicht instanziierbar und können nicht geändert werden.

Definieren Sie eine Aufzählung

Beim Definieren einer Aufzählung darf der Mitgliedsname nicht wiederholt werden

class Color(Enum):
    red = 1
    green = 2
    red = 3    # TypeError: Attempted to reuse key: 'red'

Der Mitgliedswert ist zulässig um derselbe zu sein, wird der Name des zweiten Mitglieds als Alias ​​des ersten Mitglieds betrachtet

class Color(Enum):
    red   = 1
    green = 2
    blue  = 1

print(Color.red)              # Color.red
print(Color.blue)             # Color.red
print(Color.red is Color.blue)# True
print(Color(1))               # Color.red  在通过值获取枚举成员时,只能获取到第一个成员

Wenn Sie nicht denselben Mitgliedswert definieren können, können Sie ihn mit eindeutigem versehen

from enum import Enum, unique
@unique
class Color(Enum):
    red   = 1
    green = 2
    blue  = 1  # ValueError: duplicate values found in <enum &#39;Color&#39;>: blue -> red

Aufzählungswert

Sie können Mitglieder nach Mitgliedsname oder Mitgliedswert abrufen:

print(Color['red'])  # Color.red  通过成员名来获取成员

print(Color(1))      # Color.red  通过成员值来获取成员

Jedes Mitglied hat ein Namensattribut und ein Wertattribut:

member = Color.red
print(member.name)   # red
print(member.value)  # 1

unterstützt das iterative Durchlaufen von Mitgliedern in der definierten Reihenfolge. Wenn Mitglieder mit doppelten Werten vorhanden sind, wird nur das erste doppelte Mitglied erhalten:

for color in Color:
    print(color)

Spezielles Attribut__members__ ist ein Name, dem zugeordnet wird Ein geordnetes Wörterbuch von Mitgliedern, das auch durchlaufen werden kann durch:

for color in Color.__members__.items():
    print(color)          # ('red', <Color.red: 1>)

Aufzählungsvergleich

Die Mitglieder der Aufzählung können nach is Identität oder nach Gleichheitsvergleich: ==

Color.red is Color.red
Color.red is not Color.blue

Color.blue == Color.red
Color.blue != Color.red
Aufzählungsmitglieder können keinen Größenvergleich durchführen:

Color.red < Color.blue    # TypeError: unorderable types: Color() < Color()

Erweiterte Aufzählung IntEnum

IntEnum ist eine Erweiterung von Enum, verschiedene Typen von ganzzahligen Aufzählungen können auch miteinander verglichen werden:

from enum import IntEnum
class Shape(IntEnum):
    circle = 1
    square = 2

class Request(IntEnum):
    post = 1
    get = 2

print(Shape.circle == 1)            # True
print(Shape.circle < 3)             # True
print(Shape.circle == Request.post) # True
print(Shape.circle >= Request.post) # True

Zusammenfassung

enum Die Funktion des Aufzählungsmoduls ist sehr klar, die Verwendung ist einfach und die Implementierung Es lohnt sich auch, die Methode zu erlernen, wenn Sie die Möglichkeit haben, einen Blick auf den Quellcode zu werfen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Aufzählungstypen in Python (Codebeispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Was nützt der Python-Crawler?Nächster Artikel:Was nützt der Python-Crawler?