Python에서 Yield의 기본 사용법

2142 단어 pythonyield
yield가 있는 함수는Python에서generator (생성기) 라고 불린다. 즉, 이 함수를 호출할 때 함수 내부의 코드는 즉시 실행되지 않으며, 이 함수는 생성기 (Generator Iterator) 를 되돌려주는 것이다.

def generator():
 for i in range(10) :
  yield i*i

gen = generator()
print(gen)

<generator object generator at 0x7ffaad115aa0>
1.next 방법으로 생성기 교체
generator 함수는 어떻게 호출합니까?답은next 함수입니다.

print("first iteration:")
print(next(gen))

print("second iteration:")
print(next(gen))

print("third iteration:")
print(next(gen))

print("fourth iteration:")
print(next(gen))
프로그램 출력:
first iteration:
 0
 second iteration:
 1
 three iteration:
 4
 four iteration:
 9
함수가next(gen) 함수를 처음 호출할 때,generator 함수는 처음부터 yield로 실행하고, yield 이후의 값을 되돌려줍니다.
함수가next(gen) 함수를 두 번째로 호출할 때,generator 함수는 지난번 yield가 끝난 곳에서 다음 번에 yield로 실행될 때까지 계속 실행되며, 그 다음 값을 되돌려줍니다.순서대로 유추하다.
2.send() 방법으로 생성기 함수와 통신

def generator():
 x = 1
 while True:
  y = (yield x)
  x += y

gen = generator()
  
print("first iteration:")
print(next(gen))

print("send iteration:")
print(gen.send(10))
코드 출력:
first iteration:
 1
 send iteration:
 11
생성기(generator) 함수는 yield 표현식으로 처리된 x를 생성기(Generator) 호출자에게 보내기;그리고 생성기(generator)의 호출자는send 함수를 통해 외부 정보를 생성기 내부 yield 표현식의 반환값을 대체하고 y에게 값을 부여하며 후속적인 교체 절차에 참여할 수 있다.
3. Yield의 장점
Python이 이러한 해결 방안을 제공하고자 하는 이유는 주로 메모리 사용량과 성능을 고려하는 것이다.아래와 같은 코드를 보십시오.

for i in range(10000):
  ...
상기 코드의 문제는range(10000)가 생성한 교체 가능한 대상은 모두 메모리에 있기 때문에 데이터의 양이 많으면 메모리를 소모하는 것이다.
ield가 정의한 생성기(Generator)를 사용하면 이 문제를 잘 해결할 수 있다.
참고 자료
  • https://pyzh.readthedocs.io/en/latest/the-python-yield-keyword-explained.html
  • https://liam.page/2017/06/30/understanding-yield-in-python/
  • 총결산
    Python의 Yield 기본 사용법에 관한 이 글은 여기까지 소개되었습니다. 더 많은 Python Yield 사용법에 관한 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기