Generator 란
# Generator : 한 번에 한 개의 항목을 생성(메모리 유지X)
왜 쓸까?
메모리 공간 절약
반복자는 인스턴스화될 때 각 항목의 값을 계산하지 않습니다. 그들은 당신이 그것을 요청할 때만 그것을 계산합니다. 이것을 지연 평가 라고 합니다.
지연 평가는 계산할 데이터 세트가 매우 큰 경우에 유용합니다. 전체 데이터 세트가 계산되는 동안 데이터 사용을 즉시 시작할 수 있습니다.
왜쓸까 출처 : https://www.freecodecamp.org/news/how-and-why-you-should-use-python-generators-f6fb56650888/
dataSet이 아주 큰 경우에는 모든 data를 읽어오는데 시간이 너무 오래 걸리므로 필요한만큼 필요한부분만 꺼내 쓰는게 가능하다.
만드는법
Comprehending Lists 만들떄 '[ ]' 이거를 '( )' 이거로 하면 됨
더보기
# Generator 생성
import array
chars = '+_)(*&^%$#@!~)'
# Generator : 한 번에 한 개의 항목을 생성(메모리 유지X)
tuple_g = (ord(s) for s in chars)
# Array
array_g = array.array('I', (ord(s) for s in chars))
print("-----")
print(tuple_g) # <generator object <genexpr>
print(type(tuple_g)) # <class 'generator'>
print(next(tuple_g)) # 43
print(next(tuple_g)) # 95
print("-----")
print(array_g) # array('I', [43, 95,~~~ 41])
print(type(array_g)) # <class 'array.array'>
print(array_g.tolist()) # [43, 95, 41, 40,~~~ 41]
print()
# 제네레이터 예제
print(('%s' % c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1, 11)))
for s in ('%s' % c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1, 11)):
print(s)
print()
print()
# 리스트 주의
marks1 = [['~'] * 5 for n in range(5)]
marks2 = [['~'] * 5] * 5
print(marks1)
print(marks2)
print()
# 수정
marks1[0][1] = 'X'
marks2[0][1] = 'X'
print(marks1)
print(marks2)
# 증명
print([id(i) for i in marks1])
print([id(i) for i in marks2])
깊복 얕복
marks2의 ID 가 전부 동일하다 그래서 [0][1] 하나만 바꿔도 전부 바뀐거임.
코드
결과창
'C++,python (인프런+사이트) > python 파이썬 정리' 카테고리의 다른 글
튜플 리스트 딕셔너리 차이 예제 (0) | 2022.04.02 |
---|---|
튜플 고급 문법 (자주 쓰이는거 위주로 정리) (0) | 2022.04.02 |
파이썬 자료형 정리 (0) | 2022.04.01 |
List Comprehension 리스트 컴프리헨션 +(딕셔너리 + 튜플) (0) | 2022.04.01 |
매직 메소드_네임드튜플 (0) | 2022.04.01 |
댓글