私は最近Pythonジェネレーターを少し実験していて、次の奇妙な動作に出くわしました。なぜこれが発生し、何が起こっているのかを理解したいと思っています。
def generating_test(n):
for a in range(n):
yield "a squared is %s" % a*a # Notice instead of a**2 we have written a*a
for asquare in generating_test(3):
print asquare
出力:
a squared is 1
a squared is 2a squared is 2
期待される出力を生成する次のスクリプトと比較してください。
def generating_test(n):
for a in range(n):
yield "a squared is %s" % a**2 # we use the correct a**2 here
for asquare in generating_test(3):
print asquare
出力:
a squared is 0
a squared is 1
a squared is 4