Python -любопытное/неожиданное поведение -приоритет операторов

Недавно я немного поэкспериментировал с генераторами 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
7
задан Alexander Marquardt 7 August 2012 в 14:17
поделиться