Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 릿코드 파이썬
- 알고리즘풀이
- 파이썬릿코드풀기
- 파이썬 프로그래머스
- LeetCode
- python xor
- 릿코드 풀기
- 상가수익률계산기
- binary search
- python 알고리즘
- 파이썬알고리즘풀기
- 코틀린기초
- python zip_longest
- python priority queue
- 릿코드풀이
- leetcode풀이
- leetcode풀기
- 릿코드
- 파이썬 릿코드
- 릿코드풀기
- 파이썬 알고리즘 풀기
- 알고리즘풀기
- 파이썬알고리즘
- python sorted
- 잇츠디모
- leetcode 풀기
- 파이썬릿코드
- python Leetcode
- python 릿코드
- 파이썬 알고리즘
Archives
- Today
- Total
소프트웨어에 대한 모든 것
[파이썬] enum 열거형 본문
반응형
파이썬도 열거형 enum을 지원합니다.
열거형(enumeration)은 고유한 상수값에 연결된 기호 이름의 집합니다.
열거형은 상수를 나타내는 데 보통 사용되기 때문에 열거형 멤버에 대핸 대문자로 사용하는 것을 지향합니다.
Enum형 만들기
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(type(Color.GREEN))
print(Color.GREEN)
print(Color.GREEN.name)
출력
<enum 'Color'>
Color.GREEN
GREEN
Enum형 반복하기(이터레이션 지원)
열거형은 정의 순서로 이터레이션을 지원합니다.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
for color in Color:
print(color)
출력
Color.RED
Color.GREEN
Color.BLUE
Enum형 자동 값 사용하기(auto)
열거형에 상수값을 지정할 때 값이 중요하지 않으면 auto를 사용할 수 있습니다.
from enum import Enum, auto
class Color(Enum):
RED = auto()
GREEN = auto()
BLUE = auto()
print(list(Color))
출력
[<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
Enum형 비교
열거형 멤버는 동등 비교는 할 수 있습니다.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED is Color.RED)
print(Color.RED == Color.RED)
print(Color.RED is not Color.RED)
print(Color.RED != Color.RED)
출력
True
True
False
False
그렇지만, 값 사이의 순서 비교는 지원되지 않습니다.
왜냐하면 열거형 멤버는 정수가 아니기 때문입니다!!! (IntEnum을 상속 받았다면 가능)
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED < Color.GREEN)
출력
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_9360/1484130010.py in <module>
6 BLUE = 3
7
----> 8 print(Color.RED < Color.GREEN)
TypeError: '<' not supported between instances of 'Color' and 'Color'
Enum형 함수형 API 선언
Enum형을 class로 정의하지 않고 함수형 api로 간단하게 정의할 수 있습니다.
첫 번째 인자는 열거형의 이름이고, 두 번째 인자는 열거형 멤버 이름의 소스입니다.
from enum import Enum
Color = Enum(value='Color', names='RED GREEN BLUE', start=1)
list(Color)
출력
[<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
Enum 파생된 열거형
IntEnum
Enum이 아닌 IntEnu을 상속 받습니다.
Enum에서는 대소 비교가 안되었지만 IntEnum형은 대소 비교가 가능합니다.
즉, IntEnum형은 정수처럼 동작하는 것입니다.
from enum import IntEnum
class Color(IntEnum):
RED = 1
GREEN = 2
BLUE = 3
print(list(Color))
print(Color.RED < Color.BLUE)
출력
[<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]
True
IntFlag
IntFlag도 int를 기반으로 합니다. 차이점은 IntFlag 멤버는 비트 연산자(&, |, ^, ~)를 사용하여 결합할 수 있으며 결과는 여전히 IntFlag 멤버라는 것입니다.
from enum import IntFlag
class Permission(IntFlag):
R = 4
W = 2
X = 1
RW = Permission.R | Permission.W
print(RW)
print(int(RW))
print(Permission.R in RW)
print(Permission.X in RW)
출력
Permission.R|W
6
True
False
참고 자료
반응형
'파이썬' 카테고리의 다른 글
list vs set 멤버십 속도 차이 비교 (리스트 vs 집합 누가 빠를까?) (2) | 2022.12.23 |
---|---|
[파이썬] for/else 사용하는 방법 (feat. while/else) (0) | 2022.03.30 |
[파이썬] dict에서 첫 번째 키 값 가져오기 (0) | 2022.03.26 |
[파이썬] 2차원 리스트 1차원 리스트로 변환 (0) | 2022.03.23 |
[파이썬] enumerate() 함수의 모든 것 (0) | 2022.03.20 |
Comments