이터레이터, 제너레이터, 데코레이터 이름이 비슷해서 헷갈려 내가 보려고 정리하는 글 입니당.
특징 및 차이점
1. 이터레이터
2. 제너레이터
3. 데코레이터
사용법
1. 이터레이터
2. 제너레이터
3. 데코레이터
특징 및 차이점
- 이터레이터
- 이터레이터는 여러번 사용 가능
- 반복 가능한 객체를 다루는 데 사용되는 개념
- 'next()' 메서드를 사용하여 다음 요소로 이동
- next() 메서드를 통해 모든 요소를 다 진행했을 때 StopIteration' 예외를 발생
- 이터레이터는 필요할 때만 메모리를 사용하여 메모리 효율에 좋은 장점
- 제너레이터
- 제너레이터는 이터레이터를 생성해주는 함수
- return 대신 yield 사용
- 모든 함수를 한꺼번에 실행하는 것이 아닌 필요할 때만 실행하는 방식(느긋한 계산법, lazy evaluation) - 메모리 효율에 좋은 장점이 있음
- 리스트는 모든 데이터를 메모리에 올려둠. 데이터 크기가 커질 경우, 쓰지 않는 데이터까지 올려 빅 데이터 처리시, 제너레이터가 이용되기도 함.
- 제너레이터는 '한번'만 사용 가능
- 데코레이터
- 데코레이터는 기존 함수를 수정하지 않으면서 추가 기능을 구현할 때 사용
- 데코레이터를 여러 개 지정해서 사용 가
사용법
- 이터레이터 :
- 변수.__iter__() , iter(), next()
# __iter__() 함수로 이터러블하게 만들기
range_iter = range(0, 5).__iter__()
# iter() 도 가능!
a = iter(range(0,5))
# next()로 하나씩 메모리에 올려 사용
range_iter.__next__()
a.__next__()
# 이터러블 객체
# str, 리스트, 튜플, 집합set, 딕셔너리, range()
- 제너레이터 :
- ( x for x in range(0,6) ) 튜플의 컴프리헨션 처럼 표기. (※ 튜플은 앞에 tuple을 붙여줍니다.)
- class 형태로도 사용
Generator_1 = (n ** 2 for n in range(1, 11))
def generator():
for n in range(1, 11):
yield n ** 2
Generator_2 = generator()
print(*Generator_1)
print(*Generator_2)
결과
1 4 9 16 25 36 49 64 81 100
1 4 9 16 25 36 49 64 81 100
- 데코레이터 :
- @deco 붙이기
# 데코레이터 함수 정의
def deco(fn):
def innerDeco():
print("*" * 20)
fn()
print("*" * 20)
return innerDeco
#데코레이터 함수 사용한 함수 정의
@deco
def useDeco():
print("데코레이터는 예뻐요.")
#데코레이터 적용한 함수 실행
useDeco()
결과
********************
데코레이터는 예뻐요.
********************
'프로그래밍 언어 > Python' 카테고리의 다른 글
[파이썬] 학습하면서 팁들 정리 (0) | 2024.08.13 |
---|---|
[파이썬] Lambda 람다, map, reduce 함수, 일급객체 (0) | 2024.05.21 |
[파이썬] 코딩도장 이터레이터 문제 (39.6 - 39.7) (1) | 2024.05.20 |
[파이썬] 리스트, 튜플, 집합, 딕셔너리 (0) | 2024.05.16 |
머신러닝을 위한 파이썬 정리 (0) | 2024.05.16 |