2013-08-04 1 views
1

발전기에 대한 오해는 무엇입니까? 내가 예상 한 결과를 얻지 못하고 있습니까? 모든 정보를 출력 할 간단한 함수를 만들려고합니다. 보내거나 아무 정보도 보내지 않으면 'none'을 반환합니다.파이썬 생성기 동작

import pudb 
#pudb.set_trace() 
def gen(): 
     i = 0 
     while True: 
       val = (yield i) 
       i = val 
       if val is not None: 
         yield val 
       else: 
         yield 'none' 

test = gen() 
next(test) 
print test.send('this') 
print test.send('that') 
print test.next() 
print test.send('now') 

예상 출력 :

'this' 
'that' 
'none' 
'now' 

실제 출력 :

'this' 
'this' 
'none' 
'none' 
+0

질문을 게시 할 때 게시 한 코드가 실제로 게시 한 결과물을 생성하는지 확인하십시오. 이 코드를 실행하면''none'' 대신 실제'None' 객체를 출력하기 때문에이 코드는 따옴표 문자가없는 출력을 생성하고 마지막 출력은 대문자가됩니다. – user2357112

답변

0

당신은 두 번 각 값을 얻을 수 있습니다. 일단 여기 : 한 번 여기

val = (yield i) 

과 : 당신은 한 번만 각 값을 산출하고, 사용자의 입력을 캡처과 같이한다

yield val 

:

def parrot(): 
    val = None 
    while True: 
     val = yield val 

당신이 정말로 원하는 작업을 사용자가 next을 호출 할 때 실제 None 객체 대신 'none' 문자열을 생성하면 그렇게 할 수 있지만 좋지 않은 아이디어 일 수 있습니다.

def parrot(): 
    val = None 
    while True: 
     val = yield ('none' if val is None else val)