Le 28 septembre 2011 19:17, Patt Rick <[email protected]> a écrit :

> Pauvre de moi, j'ai jamais fait maths-info ;-)
> mais c'est aussi pour ces raisons justement que je demandais
>
differentes maniere de proceder.
>


N’écoute pas Thomas c'est un puriste de l'informatique au vrai sens
du terme, toi et moi on est n'est pas Guido Van Rossum, ni Thomas Noel
on se moque de combien de secondes un code fait pour s’exécuter,
 du moment que ça run, on est content.:-), c'est quoi ces  histoires de O(n)
:-)


Blague a part, il n'a pas tord, un bon code est un code optimum en terme
de temps d’exécution et de caractères. Python introduit ce qu'on appelle
des <iterator> et <generator> utilisé dans le module itertools.py.
<iterator> règle le problème superflu des
fonctions callback qui sont appelées dans les boucles <for> en permettant
un accès aux valeurs des itérations en dehors des boucles.
Pourquoi doit on forcement passer une fonction  a la boucle pour
pouvoir traiter les valeurs de sortie ?. Un autre problème
que les <Iterator> règlent est que je peux par exemple sortir
des la première itération, ou la seconde ou a tout moment sans être
obligé de parcourir tout une  liste, ni passer un call_back pour
sortir .Avec une itération classique il est plus difficile
de garder l’état des variables d’où l'introduction d'une nouvelle
manière de faire qui garde l’état d’exécution a chaque appel (yield).
A chaque appel la fonction s’exécute jusqu’à yield puis attend la
seconde appelle.

Ce qui serait génial se serait de comparer le temps d’exécution
pour une fonction utilisant la magie de python (yield) et une
fonction classique ;)

Les Gurus Théorisent ici http://www.python.org/dev/peps/pep-0255/

1.Ce code est mauvais, callback n'a rien a faire dans test
def test(callback, my_list):
    for i in my_list :
        if i=2:
           callback(i)

2.Ce code est meilleur car plus facile a debug
class MyIterator():
    def __init__(self):
        pass

    def __next__(self):
        while 1:
        return 2

    def __iter__(self):
        return self


for i in MyIterator.__iter__():
       callback(i)

3. generator

def  MyIterator():
    yield 2

for i in MyIterator():
       callback(i)
--Ad
--
Ce message a été envoyé à la liste [email protected]
Gestion de votre abonnement : http://dakarlug.org/liste
Archives : http://news.gmane.org/gmane.org.user-groups.linux.dakarlug
Le site du DakarLUG : http://dakarlug.org

Répondre à