[TIL] Python #generator

김성진·2020년 9월 1일
0
post-thumbnail

generator

특징: 이게 제너레이터인지 모르고도 잘 쓰는 경우가 있다.
정의: 이터레이터를 직접 만들 때 사용하는 구문
*함수 내부에 yield 라는 키워드가 포함되면 해당 함수는 제너레이터가 됩니다.

next를 사용해야 (제너레이터가 출력된다)

예시)

def topten():
    yield 1
    yield 2
    yield 3
    yield 4

values = topten()

print(values.__next__())
print(values.__next__())

def topten():
    n = 1
    while n <= 10:
        sq = n*n
        yield sq
        n += 1

values = topten()

for i in values:
    print(i)

lazy evaluation 이란 무엇인지와 장점 및 리스트 컴프리헨션과의 차이점에 대하여 블로깅 해주세요.

import time

def print_iter(iter):
    for element in iter:
        print(element)

def lazy_return(num):
    print("sleep 1s")
    time.sleep(1)
    return num

print("comprehension_list=")
comprehension_list = [ lazy_return(i) for i in L ]
print_iter(comprehension_list)

print("generator_exp=")
generator_exp = ( lazy_return(i) for i in L )
print_iter(generator_exp)

실행결과:

comprehension_list=
Traceback (most recent call last):
File "C:\Users\User\Desktop\Python practice\위코드\First month\Advanced Python\generator.py", line 39, in
comprehension_list = [ lazy_return(i) for i in L ]
NameError: name 'L' is not defined

Lazy evaluation:
제너레이터 함수가 실행될 때까지 계산을 미루는 것을 뜻한다, 즉 계산을 미뤄서 메모리 낭비가 발생하지 않는다.

vs list comprehension
반대로 우선 계산을 시작하고 마치게 된다.

profile
multi-national communicator with programming (back-end)

0개의 댓글