Python 생 성기 generator 의 next 와 send 의 실행 프로 세 스(상세 설명)
그 다음 에 두 번 째 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 의 운영 절차(상세 설명)가 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 가 되 어 주시 고 많은 응원 부 탁 드 리 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.