私は、次のPythonの関数(s)は書かれている:あなたが見ることができるように、両方の機能がreturn
声明を持っていない"無限"の反復可能関数を使用してループを閉じるとどうなりますか?
import numpy
def primes_iterable():
"""Iterable giving the primes"""
# The lowest primes
primes = [2,3,5]
for p in primes:
yield p
for n in potential_primes():
m = int(numpy.sqrt(n))
check = True
for p in primes:
if p > m:
break
if n%p == 0:
check = False
if check:
primes.append(n)
yield n
def potential_primes():
"""Iterable starting at 7 and giving back the non-multiples of 2,3,5"""
yield 7
n = 7
gaps = [4,2,4,2,4,6,2,6]
while 1:
for g in gaps:
n += g
yield n
を。私はこのような何かを書くことだったと仮定します。
for p in primes_iterable():
if p > 1000:
break
print p
break
文が到達したときに、メモリのレベルでどうなりますか?私が正しく理解するならば、primes_iterable()
と呼ぶと機能が起動し、次のyield
まで行き、再び必要になるまで一時停止します。 break
ステートメントに達すると、関数インスタンスは閉じますか、またはバックグラウンドに存在し続けるのは完全に役に立たないのですか?
はCPythonまたは別の実装:
ここでサンプル実行はですか? – MSeifert
@MSeifert Python 2.7でSpyderを使用しています –