Недавно я немного поэкспериментировал с генераторами 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