Python 생 성기 와 생 성기 기반 의 협 정 을 상세 하 게 설명 합 니 다.

생 성기Generator1.생 성 기 는 값 을 생 성 할 수 있 는 함수
2.한 함수 에yield키워드 가 있 으 면 생 성기 가 된다.
3.생 성 기 는 실행 을 중단 하고 현재 실행 상 태 를 유지 할 수 있 습 니 다.
코드 예제:

def simple_gen():
	yield 'hello'
	yield 'world'

gen = simple_gen()
print(type(gen))  # 'generator' object
print(next(gen))  # 'hello'
print(next(gen))  # 'world'
2.생 성기 에 기초 한 협 정Python3이전 에는 원생 협 정 이 없 었 고 생 성기 에 기초 한 협 정 만 있 었 다.
1.pep342Coroutines via Enhanced Generators생 성기 기능 강화
2.생 성 기 는yield을 통 해 실행 을 중단 하고 데 이 터 를 생산 할 수 있 습 니 다.
3.동시에send()생 성기 에 데 이 터 를 보 내 고throw()생 성기 에 이상 을 던 지 는 것 을 지원 합 니 다.
Generator 기반 Coroteine 코드 예제:

def coro():
	hello = yield 'hello'  # yield      =        ,    send  
	yield hello

c = coro()
#    'hello',      next        'hello',      
print(next(c))
#       send    ,   hello       'world',   yield    hello      'world'
print(c.send('world'))
#       ,    send        StopIteration
실행 결과:
在这里插入图片描述
3.협 정의 주의 점
협정 주의 점
1.협 정 은send(None)또는next(coroutine)를 사용 하여 예비 자극prime을 해 야 작 동 할 수 있다.
2.yield처 협 정 에서 집행 정지
3.단독yield value은 호출 자 에 게 값 을 산출 한다.
4.coroutine.send(value)를 통 해 협 정 에 값 을 보 낼 수 있 습 니 다.보 낸 값 은yield표현 식 왼쪽 변수value = yield에 값 을 부여 합 니 다.
5.협 정 수행 완료 후(다음yield문 구 를 만 나 지 못 함)이상 던 지기StopIteration4.협 정 장식 기
매번 사용 하 는 것 을 피하 다send.

from functools import wraps

def coroutine(func):  #           send(None)    
	“”“   :        `yield`    ,   `func` ”“”
	@wrops(func)
	def primer(*args, **kwargs):   # 1
		gen = func(*args, **kwargs)  # 2
		next(gen)  # 3
		return gen  # 4
	return primer
5.python 3 원생 협 정
python 3.5 async/await 지원 원생 협 정(native coroutine)도입

import asyncio
import datetime
import random

async def display_date(num, loop):
	end_time = loop.time() + 50.0
	while True:
		print('Loop: {} Time: {}'.format(num, datetime.datetime.now())
		if (loop.time() + 1.0) >= end_time:
			break
		await asyncio.sleep(random.randint(0, 5))

loop = asyncio.get_event_loop()
asyncio.ensure_future(display_date(1, loop))
asyncio.ensure_future(display_date(2, loop))
loop.run_forever()
파 이 썬 생 성기 와 생 성 기 를 기반 으로 한 협 정 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 생 성기 와 협 정 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기