def str_data():
data = "hi Dave"
for item in data:
return item
# str_data 는 함수
str_data
<function __main__.str_data>
# str_data() 를 호출하면 함수가 실행되고 종료된다.
str_data()
'h'
# str_data() 함수를 기반으로 iterator 만들기
char = iter(str_data())
# char 는 iterator
char
<str_iterator at 0x105ff3e10>
next(char)
'h'
next(char)
--------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-6-7e9e25a1b8ba> in <module>() ----> 1 next(char) StopIteration:
def str_data():
data = "hi Dave"
for item in data:
yield item
# str_data 는 함수
str_data
<function __main__.str_data>
# str_data() 를 호출하면 generator 객체가 생성된다.
str_data()
<generator object str_data at 0x1060c52b0>
# str_data() 함수를 기반으로 iterator 만들기
char = iter(str_data())
next(char)
'h'
next(char)
'i'
print (next(char))
print (next(char))
print (next(char))
D a
# list comprehension 예
square_data = [num ** 2 for num in range(5)]
print( type(square_data))
print (square_data)
print (sum(square_data))
<class 'list'> [0, 1, 4, 9, 16] 30
print (sum(square_data))
print (sum(square_data))
print (sum(square_data))
30 30 30
# generator expression 예1
square_data = (num ** 2 for num in range(5))
print (type(square_data))
print (square_data)
print (sum(square_data)) # <--- 실제 사용될 때 관련 데이터 리턴(Lazy Operation)
<class 'generator'> <generator object <genexpr> at 0x1060c5a40> 30
# 위 sum() 함수에서 제너레이터 모든 데이터를 다 리턴하였으므로, 더이상 리턴할 데이터가 없음
print (sum(square_data))
0
# generator expression 예3
square_data = (num ** 2 for num in range(5))
# 두 개의 데이터만 순회
for num in range(2):
print (next(square_data))
0 1
# 나머지 데이터를 순회
for num in square_data:
print (num)
4 9 16
for num in lst:
print(num, end=' ')
print()
for num in lst:
print(num, end=' ')
0 1 4 9 16 0 1 4 9 16