2009-06-29 4 views
0

저는 Generators, Iterators 및 Coroutines에 대한 긁적 거리는 아이디어를 가지고 있습니다. (PEP 및 기타 자습서에서).Python에서 coroutine을 코딩하여 "홀수"및 "짝수"숫자를 inifinitely로 표시합니다.

routine1: 
    print odd 
    yield to routine2 

routune2: 
    print even 
    yield to routine1 

이 작업을 수행해야하는 코드의 일부 거친 아이디어를 가지고 있지만, 얻을 수 없습니다 : 나는 routine1가 홀수를 출력 할 것이다 발생 인터럽트가 같은 방식으로 무한도 번호를 인쇄 할 수있는 coroutine-을 구현하려면 그것은 모양입니다. 내가 코드를 원하지하지 않습니다. 그러나, 나는 동일한 코드 스타일 포인터에 감사 할 것이다. 고맙습니다.

답변

1

전화를받은 방법으로 다시 양보합니다. 그러므로 루틴 1에 굴복 할 수 없습니다. 루틴 1은 루틴 2를 호출 할 수 있고 루틴 2는 루틴 1을 반환 할 수 있으므로 루틴 1로 되돌아 갈 수 있습니다.

+0

다른 곳에서 routine1을 호출해야합니다. 맞습니까? 말하자면, 저는 __main__에서 routine1을 호출합니다, 그러면 __main__으로 되돌아갑니다, 맞습니까? –

+0

수정하십시오. 그러나 루틴 1은 그것을 알지 못합니다. 그것은 단지 양보합니다. 따라서 routine2로 전달하기 위해 routine1에 위를 보낸다면 routine2에서 호출해야합니다. 그리고 다른 방법. 그리고 그건 사실 아무도 다른 사람에게 굴복하지 않는 무한 재귀를 줄 것입니다. –

2

PEP 342 "강화 된 생성자를 통한 코 루틴"은 예제 3의 간단한 코 루틴 스케줄러 또는 "트램펄린 "코 루틴은 호출하려는 코 루틴을 만들어서 다른 코 루틴을"호출 "합니다. - 코 루틴이 서로 의사 소통을하지 않는다는 점을 감안할 때,이 매우 구체적인 작업을 위해서는 그다지 보편성 (또는 PEP 342가 처음 소개 한 일반성)이 필요하지 않습니다. 단지 두 가지만 있습니다. 계승은 완벽하게 규칙적이며, 해지 등은 없다. 그러나이 코드의 작은 부분 집합은 매우 간단한 예제가 독자적으로 할 수있는 것보다 코 루틴에 대해 더 많이 보여주기 때문에 구현 가치가있다.

2 개의 코 루틴은 시작점이 다른 동일한 생성기 함수의 두 인스턴스 여야합니다 (서체로 쓸데없는 점은 while True: 루프가 두 번 반복되므로 몸이 얼마나 단순한 지 알 수 있음). 보시다시피 재미있는 부분은 트램폴린입니다. 비록 PEP 342의 일반적인 것보다 훨씬 간단하고 간단하게 만들 수 있습니다.

관련 문제