2013-07-18 2 views
4

yield을 함수 본문에 넣으면 분명합니다. 그러나 그것은 내가 구하려고 노력하는 것이 아닙니다. 나는 모두를 실행하면파이썬은 생성기를 언제 돌려 줄 것인지 어떻게 알 수 있습니까?

def myGenerator(): 
    yield 42 

def myFunction(): 
    return 42 

내가 참조 : 다음 myGeneratormyFunction 개체를 검사하는 경우

>>> myGenerator() 
<generator object myGenerator at 0xb7bf511c> 
>>> myFunction() 
42 

하지만, 난 정말 다른 아무것도 표시되지 않습니다 : 대화 형 인터프리터에서 두 가지 간단한 기능을 감안할 때

for attr in dir(myFunction): 
    print(attr, getattr(myFunction, attr) 

myGenerator과 같은 모양을 만듭니다. 인터프리터가 함수 호출을 생성기로 랩핑할지 여부를 분별하기 위해 함수 객체의 내부에 숨겨진 마술 비트가 있습니까? 또는 yield 키워드의 존재로 인해 일부 생성기 마술에 포장 된 'myGenerator'이라는 개체가 바인딩되는 더 많은 데코레이터 스타일이 완료 되었습니까? 또는 다른 것...?

+2

대답 여기 PEP에서

: http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained – manji

답변

4

"생성기 함수는 모든면에서 일반적인 함수 개체이지만 코드 개체의 co_flags 멤버에 새 CO_GENERATOR 플래그가 설정되어 있습니다." http://www.python.org/dev/peps/pep-0255/

>>> generator_fn.__code__.co_flags 
>>> 99 
>>> normal_fn.__code__.co_flags 
>>> 67 
관련 문제