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

不言
Freigeben: 2018-12-11 10:15:09
nach vorne
3556 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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'
Nach dem Login kopieren

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  在通过值获取枚举成员时,只能获取到第一个成员
Nach dem Login kopieren

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
Nach dem Login kopieren

Aufzählungswert

Sie können Mitglieder nach Mitgliedsname oder Mitgliedswert abrufen:

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

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

Jedes Mitglied hat ein Namensattribut und ein Wertattribut:

member = Color.red
print(member.name)   # red
print(member.value)  # 1
Nach dem Login kopieren

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)
Nach dem Login kopieren

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>)
Nach dem Login kopieren

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
Nach dem Login kopieren
Aufzählungsmitglieder können keinen Größenvergleich durchführen:

Color.red < Color.blue    # TypeError: unorderable types: Color() < Color()
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage