Python 생 성기 generator 의 next 와 send 의 실행 프로 세 스(상세 설명)

일반적인 생 성기 에 대해 서 는 첫 번 째 next 호출 이 생 성 기 를 시작 하 는 것 과 같 습 니 다.생 성기 함수 의 첫 번 째 줄 코드 부터 실행 되 며,처음으로 yield 구문(네 번 째 줄)을 실행 한 후에 생 성기 함수 가 튀 어 나 옵 니 다.
그 다음 에 두 번 째 next 호출 은 생 성기 함수 에 들 어간 후에 yield 문장의 다음 문장(다섯 번 째 줄)부터 실 행 된 다음 에 yield 문장 으로 다시 실 행 됩 니 다.실 행 된 후에 생 성기 함수 에서 뛰 어 내 려 다음 에 next 를 다시 호출 하여 순서대로 유추 합 니 다.
다음은 열 입 니 다.

 def consumer():
   r = 'here'
   for i in xrange(3):
     yield r
     r = '200 OK'+ str(i)

 c = consumer()
 n1 = c.next()
 n2 = c.next()
 n3 = c.next()
next()가 yield 를 포함 하 는 함 수 를 어떻게 실행 하 는 지 알 게 된 후에 우 리 는 또 다른 매우 중요 한 함수 send(msg)를 보 겠 습 니 다.사실 next()와 send()는 일정한 의미 에서 비슷 한 역할 을 합 니 다.send()는 yield 표현 식 의 값 을 전달 할 수 있 고 next()는 특정한 값 을 전달 할 수 없 으 며 None 만 전달 할 수 있 습 니 다.따라서 우 리 는 c.next()와 c.send(None)의 역할 이 같다 고 볼 수 있다.
첫 번 째 호출 시 next()문 구 를 사용 하거나 send(None)를 사용 하 십시오.send 를 사용 하여 None 이 아 닌 값 을 보 낼 수 없습니다.그렇지 않 으 면 오류 가 발생 할 수 있 습 니 다.Python yield 문 구 를 사용 하여 이 값 을 받 아들 일 수 없 기 때 문 입 니 다.
다음은 send 가 실행 하 는 순 서 를 중점적으로 설명 하 겠 습 니 다.첫 번 째 send(None)(대응 11 줄)에서 생 성 기 를 시작 하고 생 성기 함수 의 첫 번 째 줄 코드 부터 실행 합 니 다.첫 번 째 로 yield(대응 4 줄)를 실행 한 후에 생 성기 함 수 를 뛰 어 내 립 니 다.이 과정 에서 n1 은 줄곧 정의 되 지 않 았 다.
다음은 send(1)로 실 행 될 때 생 성기 함수 에 들 어 갑 니 다.next 를 호출 하 는 것 과 다 릅 니 다.여 기 는 네 번 째 줄 에서 부터 실행 되 며,1 의 값 을 n1 에 부여 하지만,yield 부분 은 실행 되 지 않 습 니 다.다음 에 yield 의 다음 문장 에서 계속 실행 한 다음 에 yield 문장 으로 다시 실행 하고 실행 한 후에 생 성기 함수 에서 뛰 어 내 립 니 다.
즉,send 는 next 에 비해 한 번 더 할당 동작 을 시 작 했 을 뿐 다른 실행 절 차 는 같 습 니 다.

 def consumer():
   r = 'here'
   while True:
     n1 = yield r
     if not n1:
       return
     print('[CONSUMER] Consuming %s...' % n1)
     r = '200 OK'+str(n1)

 def produce(c):
   aa = c.send(None)
   n = 0
   while n < 5:
     n = n + 1
     print('[PRODUCER] Producing %s...' % n)
     r1 = c.send(n)
     print('[PRODUCER] Consumer return: %s' % r1)
   c.close()

 c = consumer()
 produce(c)
 실행 결과:

[PRODUCER] Producing 1...
[CONSUMER] Consuming 1...
[PRODUCER] Consumer return: 200 OK1
[PRODUCER] Producing 2...
[CONSUMER] Consuming 2...
[PRODUCER] Consumer return: 200 OK2
[PRODUCER] Producing 3...
[CONSUMER] Consuming 3...
[PRODUCER] Consumer return: 200 OK3
[PRODUCER] Producing 4...
[CONSUMER] Consuming 4...
[PRODUCER] Consumer return: 200 OK4
[PRODUCER] Producing 5...
[CONSUMER] Consuming 5...
[PRODUCER] Consumer return: 200 OK5
이 편 은 Python 생 성기 generator 의 next 와 send 의 운영 절차(상세 설명)가 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 가 되 어 주시 고 많은 응원 부 탁 드 리 겠 습 니 다.

좋은 웹페이지 즐겨찾기