list
list_data = [1,2,3,4,5]
for i in list_data:
print(i, end=" ") # 1 2 3 4 5
# tuple
tuple_data = (1,2,3,4,5)
for i in tpule_data:
print(i, end=" ") # 1 2 3 4 5
# set
set_data = {1,2,3,4,5}
for i in set_data:
print(i, end=" ") # 1 2 3 4 5
# dict
dict_data = {1 : "one", 2 : "two" }
for i in dict_data:
print(i, end=" ") # 1 2
# __iter__, __next 구현한 Class
class IterTest:
def __init__(self):
self.start = 1
self.end = 5
self.current = self.start
def __iter__(self):
return self
def __next__(self):
if self.current > self.end:
raise StopIteration
else:
v = self.current
self.current += 1
return v
iter_test = IterTest()
for i in iter_test:
print(i, end=" ") # 1 2 3 4 5
def number_print():
yield 1
yield 2
yield 3
yield 4
yield 5
call_func = number_print()
print(next(call_func)) # 1
print(next(call_func)) # 2
print(next(call_func)) # 3
print(next(call_func)) # 4
print(next(call_func)) # 5
print(next(call_func)) # raise StopIteration
from sys import getsizeof # Memory 크기 확인
generator_data = (x for x in range(1,6)) # Generator 생성
iterator_data = [x for x in range(1,6)] # iterator 생성
print(getsizeof(generator_data)) # 112
print(getsizeof(iterator_data)) # 120
iterator 보다 generator 가 크기가 더 작은 걸 확인할 수 있다.
차이점으로는 generator는 함수 내에 yield 키워드를 사용하고 메모리를 효율적으로 사용한다.