Mam generator, który generuje serię, na przykład:
def triangle_nums():
'''Generates a series of triangle numbers'''
tn = 0
counter = 1
while True:
tn += counter
yield tn
counter += + 1
W Pythonie 2 jestem w stanie wykonywać następujące połączenia:
g = triangle_nums() # get the generator
g.next() # get the next value
jednak w Pythonie 3, jeśli wykonam te same dwa wiersze kodu, pojawia się następujący błąd:
AttributeError: 'generator' object has no attribute 'next'
ale składnia iteratora pętli działa w Pythonie 3
for n in triangle_nums():
if not exit_cond:
do_something()...
Nie byłem jeszcze w stanie znaleźć niczego, co wyjaśniałoby tę różnicę w zachowaniu dla Pythona 3.
źródło
__str__(obj)
, więc tak naprawdę nie rozumiem pytania.Próbować:
Sprawdź tę zgrabną tabelę, która pokazuje różnice w składni między 2 a 3, jeśli chodzi o to.
źródło
g.next()
naprawdę powinno byćg.__next__()
, i musimy mieć coś, co nie jest metodą dundera z funkcjonalnościąg.next()
?Jeśli twój kod musi działać w Python2 i Python3, użyj biblioteki 2to3 six w następujący sposób:
źródło
next
wbudowaną funkcję.