J'ai un générateur qui génère une série, par exemple:
def triangle_nums():
'''Generates a series of triangle numbers'''
tn = 0
counter = 1
while True:
tn += counter
yield tn
counter += + 1
En Python 2, je peux faire les appels suivants:
g = triangle_nums() # get the generator
g.next() # get the next value
cependant en Python 3 si j'exécute les deux mêmes lignes de code j'obtiens l'erreur suivante:
AttributeError: 'generator' object has no attribute 'next'
mais, la syntaxe de l'itérateur de boucle fonctionne en Python 3
for n in triangle_nums():
if not exit_cond:
do_something()...
Je n'ai encore rien trouvé qui explique cette différence de comportement pour Python 3.
la source
__str__(obj)
, donc je ne comprends pas vraiment la question.Essayer:
Consultez ce tableau soigné qui montre les différences de syntaxe entre 2 et 3 en ce qui concerne cela.
la source
g.next()
devrait être vraimentg.__next__()
, et nous avons besoin d'avoir quelque chose qui n'est pas une méthode stupide avec la fonctionnalité deg.next()
?Si votre code doit s'exécuter sous Python2 et Python3, utilisez la bibliothèque 2to3 six comme ceci:
la source
next
fonction intégrée.