"yield"문이 함수에 있으면 생성자로 처리된다는 것을 알고 있습니다. 하지만 파이썬 인터프리터는 함수 (generator)가 처음 호출 할 때 어떻게 작동합니까? 즉, 코드가 해석 될 때 첫 번째 "gen"이 함수 객체에 바인드 될 것이라고 생각합니다. 처음 호출 할 때 일반 함수 나 클래스와 달리 yield를하기 전에 명령문을 실행하지 않는 이유는 무엇입니까? 이 파이썬 코드가 생성 또는 함수를 정의하면이 def
문이 결정 구문 분석 할 때 이전python이 함수를 생성자로 해석하는 방법
>>> def gen():
... print("In gen")
... yield 1
... yield 2
...
>>> type(gen)
<type 'function'>
>>> a = gen
>>> type(a)
<type 'function'>
>>>
>>> b = a()
>>> type(b)
<type 'generator'>
>>> b.next()
In gen
1
>>> b.next()
2
>>>
파이썬 생성기는 정의상 [lazy] (http://en.wikipedia.org/wiki/Lazy_evaluation)이기 때문에. 사용자가 소비하기 시작한 후에 만 출력을 시작합니다 (예 : 반복). –
나는 yield하기 전에 왜 yield 문 앞에 명령문을 실행하지 않는 것일까? 통역사는 어떻게 알 수 있습니까? – bluefoggy
@ unutbu의 답에 덧붙여서 : Python은'yield' 문으로 함수 본문을 다르게 취급하기 때문에. 일단 거기에'yield '를 넣으면 정규 함수가 아닌 생성자를 정의 할 것입니다. 'yield'와'return' (인자와 함께)을 같은 함수에 넣으면 파이썬은 결코 그 함수를 사용하지 않더라도 그 코드를 컴파일하도록하지 않을 것입니다. –