2015-02-02 3 views
0

그래서 최근에 우리는 강의 발전기를 통해 갔다, 이것은 선생님의 예입니다 : 우리가발전기 내부의 for 루프?

a = primes(10) 
print(next(a) --> 2 
print(next(a) --> 3 
... 

그래서 발전기의이 특별한 예는 while 루프를 사용하고 실행 실행하면

from predicate import is_prime 
def primes(max = None): 
    p = 2 
    while max == None or p <= max: 
     if is_prime(p): 
      yield p 
     p += 1 

함수를 기반으로하지만, 발전기도 for 루프 수 있습니까? Like say

for i in range(2, max+1): 
    # ... 

이 두 가지는 비슷하게 작동합니까? 발전기에 대한 특별

+2

예. 왜 그럴까? –

+0

@ColonelThirtyTwo 강의에서 선생님은 발전기를 사용하는 가장 일반적인 방법 중 하나가 for 루프에 있다고 말했고 'while 루프는 더 큰 기능으로 두 개를 혼동하지 않도록 사용해야합니다. – Tyler

+1

@ 타일러 : 아마 당신이 잘못 이해 했나요? 여기서 while 루프는 생성자를 무한하게 허용하기 위해 사용되며 사물을 구별하지 않습니다. –

답변

2

유일한 것은 그들이 발전기 next() 함수를 호출 사이에 일시 중지 있다는 yield 키워드입니다.

'일반'파이썬 함수처럼 원하는 루프 구성을 사용할 수 있습니다. while 루프와 동일하게 작동 할 for i in range(2, max + 1):를 사용

maxNone 이외로 설정되어 있는지 제공 :

>>> def primes(max): 
...  for p in range(2, max + 1): 
...   if is_prime(p): 
...    yield p 
... 
>>> p = primes(7) 
>>> next(p) 
2 
>>> next(p) 
3 
>>> next(p) 
5 
>>> next(p) 
7 
>>> next(p) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
StopIteration