사용법에서 생성기 객체와 생성기 함수의 차이점에 유의하십시오.
생성기 객체는 새로운 생성기 객체를 반환하기 때문에 다시 호출 할 때마다 재사용 할 수있는 생성기 함수와 달리 한 번만 사용됩니다.
생성기 표현식은 실제로 일반적으로 함수로 래핑하지 않고 "원시"로 사용되며 생성기 객체를 반환합니다.
예 :
def range_10_gen_func():
x = 0
while x < 10:
yield x
x = x + 1
print(list(range_10_gen_func()))
print(list(range_10_gen_func()))
print(list(range_10_gen_func()))
다음을 출력합니다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
약간 다른 사용법과 비교하십시오.
range_10_gen = range_10_gen_func()
print(list(range_10_gen))
print(list(range_10_gen))
print(list(range_10_gen))
다음을 출력합니다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]
[]
생성기 표현식과 비교하십시오.
range_10_gen_expr = (x for x in range(10))
print(list(range_10_gen_expr))
print(list(range_10_gen_expr))
print(list(range_10_gen_expr))
또한 다음을 출력합니다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]
[]