En essayant de comprendre l'excellent article
http://www.rexx.com/~dkuhlman/pyxmlfaq.html#howdomaccess
sur le XML, DOM et python.
Je n'arrive pas à comprendre le fonctionnement de cette fonction
*def walkTree(node):*
if node.nodeType == Node.ELEMENT_NODE:
yield node
for child in node.childNodes:
for n1 in walkTree(child):
yield n1
J'ai donc cherché la signification du mot clef yeld avec
http://docs.python.org/ref/yield.html , mais je n'arrive pas à comprendre
le fonctionnement de ce mot clef YELD ?
Si quelqu'un avait un début d'explication clair sur YELD, je lui en serait
indéfiniment reconnaissant.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gilles Lenfant
Bonjour,
En essayant de comprendre l'excellent article http://www.rexx.com/~dkuhlman/pyxmlfaq.html#howdomaccess sur le XML, DOM et python.
Je n'arrive pas à comprendre le fonctionnement de cette fonction
*def walkTree(node):* if node.nodeType == Node.ELEMENT_NODE: yield node for child in node.childNodes: for n1 in walkTree(child): yield n1
J'ai donc cherché la signification du mot clef yeld avec http://docs.python.org/ref/yield.html , mais je n'arrive pas à comprendre le fonctionnement de ce mot clef YELD ?
Si quelqu'un avait un début d'explication clair sur YELD, je lui en serait indéfiniment reconnaissant.
Un exemple plus simple pour comprendre :
l = ("y", "i", "e", "l", "d")
def foo(): for x in range(len(l)): yield l[x] # Ceci est équivalent... a= foo() for i in a: print i # ...à cela a = foo() while 1: try: print a.next() except StopIteration, e: break
Grosso-modo yield retourne un objet de type "generator" sur lequel tu peux itérer avec une boucle for ... in ....
L'utilisation typique de cette construction est, outre le parse XML plus concis, une fois le "yield zen" acquis, l'exploration de structures géantes dans des fichiers ou des bases de données de façon lisible et maintenable sans consommer beaucoup de mémoire.
En effet, utilisée de façon adéquate, la fonction foo permet de ne pas monter en mémoire la pseudo-liste "a", mais de récupérer ses élément un par un au fur et à mesure des itérations.
Plus particulièrement les chapitres sur les iterators et generators
Quand tout ceci sera assimilé, un petit tour sur la doc du module "itertools" de la distro standard t'en dira un peu plus.
-- Gilles
Bonjour,
En essayant de comprendre l'excellent article
http://www.rexx.com/~dkuhlman/pyxmlfaq.html#howdomaccess
sur le XML, DOM et python.
Je n'arrive pas à comprendre le fonctionnement de cette fonction
*def walkTree(node):*
if node.nodeType == Node.ELEMENT_NODE:
yield node
for child in node.childNodes:
for n1 in walkTree(child):
yield n1
J'ai donc cherché la signification du mot clef yeld avec
http://docs.python.org/ref/yield.html , mais je n'arrive pas à comprendre
le fonctionnement de ce mot clef YELD ?
Si quelqu'un avait un début d'explication clair sur YELD, je lui en serait
indéfiniment reconnaissant.
Un exemple plus simple pour comprendre :
l = ("y", "i", "e", "l", "d")
def foo():
for x in range(len(l)):
yield l[x]
# Ceci est équivalent...
a= foo()
for i in a:
print i
# ...à cela
a = foo()
while 1:
try:
print a.next()
except StopIteration, e:
break
Grosso-modo yield retourne un objet de type "generator" sur lequel tu
peux itérer avec une boucle for ... in ....
L'utilisation typique de cette construction est, outre le parse XML plus
concis, une fois le "yield zen" acquis, l'exploration de structures
géantes dans des fichiers ou des bases de données de façon lisible et
maintenable sans consommer beaucoup de mémoire.
En effet, utilisée de façon adéquate, la fonction foo permet de ne pas
monter en mémoire la pseudo-liste "a", mais de récupérer ses élément un
par un au fur et à mesure des itérations.
En essayant de comprendre l'excellent article http://www.rexx.com/~dkuhlman/pyxmlfaq.html#howdomaccess sur le XML, DOM et python.
Je n'arrive pas à comprendre le fonctionnement de cette fonction
*def walkTree(node):* if node.nodeType == Node.ELEMENT_NODE: yield node for child in node.childNodes: for n1 in walkTree(child): yield n1
J'ai donc cherché la signification du mot clef yeld avec http://docs.python.org/ref/yield.html , mais je n'arrive pas à comprendre le fonctionnement de ce mot clef YELD ?
Si quelqu'un avait un début d'explication clair sur YELD, je lui en serait indéfiniment reconnaissant.
Un exemple plus simple pour comprendre :
l = ("y", "i", "e", "l", "d")
def foo(): for x in range(len(l)): yield l[x] # Ceci est équivalent... a= foo() for i in a: print i # ...à cela a = foo() while 1: try: print a.next() except StopIteration, e: break
Grosso-modo yield retourne un objet de type "generator" sur lequel tu peux itérer avec une boucle for ... in ....
L'utilisation typique de cette construction est, outre le parse XML plus concis, une fois le "yield zen" acquis, l'exploration de structures géantes dans des fichiers ou des bases de données de façon lisible et maintenable sans consommer beaucoup de mémoire.
En effet, utilisée de façon adéquate, la fonction foo permet de ne pas monter en mémoire la pseudo-liste "a", mais de récupérer ses élément un par un au fur et à mesure des itérations.
Voui, voui, le truc qu'on apprend au bout des 10 premières minutes d'apprentissage du Python :)
C'était intentionnel pour illustrer (maladroitement je l'admets puisque je suis incompris - snif) le fait qu'avec de telles constructions, il était possible d'explorer des bases de données ou fichier gigantesques dans une boucle for...in... sans cramer tout plein de mémoire.
-- Gilles
Gilles Lenfant wrote:
l = ("y", "i", "e", "l", "d")
def foo():
for x in range(len(l)):
yield l[x]
def foo():
for x in l:
yield x
est plus joli et plus pythonesque.
Voui, voui, le truc qu'on apprend au bout des 10 premières minutes
d'apprentissage du Python :)
C'était intentionnel pour illustrer (maladroitement je l'admets puisque
je suis incompris - snif) le fait qu'avec de telles constructions, il
était possible d'explorer des bases de données ou fichier gigantesques
dans une boucle for...in... sans cramer tout plein de mémoire.
Voui, voui, le truc qu'on apprend au bout des 10 premières minutes d'apprentissage du Python :)
C'était intentionnel pour illustrer (maladroitement je l'admets puisque je suis incompris - snif) le fait qu'avec de telles constructions, il était possible d'explorer des bases de données ou fichier gigantesques dans une boucle for...in... sans cramer tout plein de mémoire.