ホームページ > バックエンド開発 > Python チュートリアル > Python で列挙型を効果的に使用および表現するにはどうすればよいですか?

Python で列挙型を効果的に使用および表現するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-25 00:23:10
オリジナル
810 人が閲覧しました

How Can I Effectively Use and Represent Enums in Python?

Python Enum 表現

Python は、バージョン 3.4 以降でネイティブ Enum 型を提供します。以前のバージョンでは、enum34 や aenum などのサードパーティ ライブラリを使用できます。

enum34 または stdlib の使用 Enum:

from enum import Enum
Animal = Enum('Animal', 'ant bee cat dog')

Animal.ant  # <Animal.ant: 1>
Animal['ant']  # <Animal.ant: 1> (string lookup)
Animal.ant.name  # 'ant' (inverse lookup)
ログイン後にコピー

使用aenum:

from aenum import Enum
Animal = Enum('Animal', 'ant bee cat dog')

Animal.ant  # same as enum34
Animal['ant']  # same as enum34
Animal.ant.name  # same as enum34
ログイン後にコピー

以前の Python バージョンの使用:

以前の Python バージョンでは、次のようなカスタム関数を使用できます:

def enum(**enums):
    return type('Enum', (), enums)

Numbers = enum(ONE=1, TWO=2, THREE='three')
Numbers.ONE  # 1
Numbers.TWO  # 2
Numbers.THREE  # 'three'
ログイン後にコピー

自動列挙:

自動列挙には次の関数を使用することもできます:

def enum(*sequential, **named):
    enums = dict(zip(sequential, range(len(sequential))), **named)
    return type('Enum', (), enums)

Numbers = enum('ZERO', 'ONE', 'TWO')
Numbers.ZERO  # 0
Numbers.ONE  # 1
ログイン後にコピー

逆マッピング:

列挙型の変換をサポートするには値を元に戻すnames:

def enum(*sequential, **named):
    enums = dict(zip(sequential, range(len(sequential))), **named)
    reverse = dict((value, key) for key, value in enums.iteritems())
    enums['reverse_mapping'] = reverse
    return type('Enum', (), enums)

Numbers = enum('ZERO', 'ONE', 'TWO')
Numbers.reverse_mapping['1']  # 'ONE'
ログイン後にコピー

Typing.Literal (MyPy):

MyPy では、Literal:

from typing import Literal

Animal = Literal['ant', 'bee', 'cat', 'dog']

def hello_animal(animal: Animal):
    print(f"hello {animal}")
ログイン後にコピー

This を使用して列挙型を定義できます。非列挙値の割り当てを防ぎます。

以上がPython で列挙型を効果的に使用および表現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート