python enum example과 c enum 비교
python에서 enum을 사용하는 방법과 c에서의 enum을 비교해 보았다.
c enum 선언
c 언어에서는 보통 아래와 같이 enum을 사용한다. 정수의 값을 가진 고유한 상수를 열거하여 사용한다.
typedef enum
{
fruit_watermelon = 0,
fruit_apple,
fruit_peach,
fruit_melon,
fruit_banana,
fruit_grape,
fruit_strawberry,
fruit_max,
}fruit_e;
python enum 선언
python에서는 enum 모듈의 Enum을 사용하여 열거형 변수를 선언할 수 있다.
import enum
class fruit(enum.Enum):
watermelon = 1
apple = 2
peach = 3
melon = 4
banana = 5
grape = 6
strawberry = 7
list(fruit)
[<fruit.watermelon: 1>, <fruit.apple: 2>, <fruit.peach: 3>,
<fruit.melon: 4>, <fruit.banana: 5>, <fruit.grape: 6>,
<fruit.strawberry: 7>]
enum.auto()를 사용면 자동으로 상수의 값을 할당할 수 있다.
class fruit_auto(enum.Enum):
watermelon = enum.auto()
apple = enum.auto()
peach = enum.auto()
melon = enum.auto()
banana = enum.auto()
grape = enum.auto()
strawberry = enum.auto()
list(fruit_auto)
[<fruit_auto.watermelon: 1>, <fruit_auto.apple: 2>,
<fruit_auto.peach: 3>, <fruit_auto.melon: 4>,
<fruit_auto.banana: 5>, <fruit_auto.grape: 6>,
<fruit_auto.strawberry: 7>]
pythone에서는 상수의 값을 문자열로도 할당할 수 있다.
class fruit_str(enum.Enum):
watermelon = 'watermelon'
apple = 'apple'
peach = 'peach'
melon = 'melon'
banana = 'banana'
grape = 'grape'
strawberry = 'strawberry'
list(fruit_str)
[<fruit_str.watermelon: 'watermelon'>, <fruit_str.apple: 'apple'>,
<fruit_str.peach: 'peach'>, <fruit_str.melon: 'melon'>,
<fruit_str.banana: 'banana'>, <fruit_str.grape: 'grape'>,
<fruit_str.strawberry: 'strawberry'>]
enum.Flag를 사용하여 선언하면 enum 상수의 값들이 비트 연산에 적합한 값으로 할당된다.
class fruit_flag(enum.Flag):
watermelon = enum.auto()
apple = enum.auto()
peach = enum.auto()
melon = enum.auto()
banana = enum.auto()
grape = enum.auto()
strawberry = enum.auto()
list(fruit_flag)
[<fruit_flag.watermelon: 1>, <fruit_flag.apple: 2>,
<fruit_flag.peach: 4>, <fruit_flag.melon: 8>,
<fruit_flag.banana: 16>, <fruit_flag.grape: 32>,
<fruit_flag.strawberry: 64>]
python enum 사용
enum class는 일반 class와 달리 별도의 변수 선언 없이 아래 예제 코드 처럼 바로 사용할 수 있다.
price_tag = {}
price_tag[fruit.watermelon] = 10000
price_tag[fruit.apple] = 1000
price_tag[fruit.peach] = 1500
price_tag[fruit.melon] = 8000
price_tag[fruit.banana] = 2000
price_tag[fruit.grape] = 5000
price_tag[fruit.strawberry] = 3000
print(price_tag)
{<fruit.watermelon: 1>: 10000, <fruit.apple: 2>: 1000, <fruit.peach: 3>: 1500, <fruit.melon: 4>: 8000, <fruit.banana: 5>: 2000, <fruit.grape: 6>: 5000, <fruit.strawberry: 7>: 3000}
댓글
댓글 쓰기