J'utilise un module faisant partie d'une API logicielle commerciale. La bonne nouvelle, c'est qu'il existe un module python - la mauvaise nouvelle est que c'est plutôt pythonien.Une façon plus pythonique d'itérer
itérer sur les lignes, la syntaxe follwoing est utilisée:
cursor = gp.getcursor(table)
row = cursor.next()
while row:
#do something with row
row = cursor.next()
Quelle est la façon la plus pythonique pour faire face à cette situation? Je l'ai envisagé de créer une première fonction classe/générateur et enveloppant appels à une boucle en elle:
def cursor_iterator(cursor):
row = cursor.next()
while row:
yield row
row = cursor.next()
[...]
cursor = gp.getcursor(table)
for row in cursor_iterator(cursor):
# do something with row
Ceci est une amélioration, mais se sent un peu maladroit. Y a-t-il une approche plus pythonique? Dois-je créer une classe wrapper autour du type table
?
Mmmh 'cursor.next()' ressemble à vous * pourrait * être capable de faire 'pour row in cursor:' –
@Fix, non. 'next' ne déclenche pas de [' StopIteration'] (http://docs.python.org/library/exceptions.html#exceptions.StopIteration), donc après les données réelles, ce serait juste en boucle avec 'row' être 'None'. –
@Felix King: Presque, mais parce qu'un itérateur signale une terminaison en augmentant StopIteration, 'pour row in cursor:' va parcourir les lignes, puis donner un flux infini de 'None's. –