본문 바로가기
[개발자 로드맵]/파이썬

[혼자 공부하는 파이썬] 이터러블, 제너레이터

by Ramrider 2023. 9. 21.
728x90
반응형

이터러블과 이터레이터는 아래 사이트에서 정리를 잘해놓았다. 이터러블과 이터레이터를 아래 내용으로 이해하면 좋겠으나 어렵다면 밑에 기재된 간단한 내용만 외워 놓고 다음에 다시 보게된다면 이해할 때가 올 것이라고 생각한다.

 

링크 : https://velog.io/@clueless_coder/%ED%8C%8C%EC%9D%B4%EC%8D%AC-iterable%EA%B3%BC-iterator-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EA%B0%80-%EB%AD%90%EC%98%88%EC%9A%94

 

[파이썬] iterable과 iterator 의 차이가 뭐예요?

"뭐에요? 🤨" 시리즈 1편 평소에 헷갈렸던 것들이나 암기해두면 좋을 것들, 대강 알고 정확한 정의를 몰랐던 것들을 좀 깊게 들어가보면서 쭉 질문별, 문제상황별로 포스트를 작성해보겠다.

velog.io

 

제너레이터도 설명이 잘되어 있어서 이것도 이것을 통해서 개념을 이해하는 것이 좋다고 생각한다.

링크 : https://velog.io/@clueless_coder/%ED%8C%8C%EC%9D%B4%EC%8D%AC-Generator-%EA%B0%80-%EB%AD%90%EC%98%88%EC%9A%94

 

[파이썬] Generator 가 뭐예요?

제너레이터는 제너레이터 이터레이터를 리턴하는 함수다(그래서 제너레이터 함수라고도 한다). 일반적인 함수랑 똑같이 생겼는데, 어떤 값을 return 하는 대신 yield 표현을 써서 for 루프나 next()

velog.io

 

이터러블

# "이터러블" : 반복할 수 있는 것, 반복문 뒤에 넣을 수 있는 것
# Iterate + able
# ex) 리스트, 튜플, 딕셔너리

# "이터레이터" : 반복하는 녀석, 이터러블을 만드는 방법 중 하나
# Iterate + or

# - 제너레이터 표현식 : 이터레이터를 만드는 방법 중 하나
# 이터레이터
# -next(이터레이터): 내부의 요소를 꺼낼 수 있음

## 리스트 내포
범위 = range(1, 100+1)

리스트내포 = [
    i * i
    for i in 범위
]
print(리스트내포)

제너레이터표현식 = (
    i * i
    for i in 범위
)
print(제너레이터표현식)

# - 제너레이터 함수
# - 이터레이터 클래스

 

이터러블과 next함수

# 제너레이터 표현식과 제너레이터 함수는 제너레이터를 만들고
# 제너레이터는 이터레이터이고
# 이터레이터는 이터러블이니까
# 제터레이터는 이터러블이다

범위 = range(1, 100 + 1)
제너레이터표현식 =(
    i*i
    for i in 범위
)

print(next(제너레이터표현식))
print(next(제너레이터표현식))
print(next(제너레이터표현식))

 

# 제너레이터 표현식과 제너레이터 함수는 제너레이터를 만들고
# 제너레이터는 이터레이터이고
# 이터레이터는 이터러블이니까
# 제터레이터는 이터러블이다

범위 = range(1, 100 + 1)
제너레이터표현식 =(
    i*i
    for i in 범위
)

for 요소 in 제너레이터표현식:
	print(요소)

 

제너레이터 함수

# 제너레이터 함수를 만들고 싶다면 yield키워드를 한번이라도 사용하면 된다
# yield 키워드는 리턴키워드와 비슷하게 뒤에 값을 지정한다
# yield 뒤에 있는 것이 요소

def 제너레이터함수():
    for i in range(1, 100 + 1):
        yield i * i

제너레이터 = 제너레이터함수()
for 요소 in 제너레이터:
    print(요소)

 

제너레이터 함수를 사용하는 이유

범위 = range(0, 100)

# 리스트 내포 : 메모리 사용량이 많다
리스트내포 = [i * i for i in 범위]
for 요소 in 리스트내포:
    print(요소)

# 제너레이터 표현식: 메모리 사용량이 적다.
제너레이터표현식 = (i * i for i in 범위)
for 요소 in 제너레이터표현식:
    # next(제너레잍너표현식): 과부하 분산
    print(요소)

# 나는 데이터 미리 만들어 둘거고 출력할 때 출력이 빠른 것이 좋다면 리스트 내포를 쓰는게 좋음

 

728x90
반응형

댓글