• [^] # Re: Le titre est trop long

    Posté par (site web personnel) . En réponse au journal Typage statique versus typage dynamique. Évalué à 2.

    Maintenant que tu as ton code. Tu changes do pour virer le print et le break à 10 pour consommer toute la liste. Et tu appelles function avec range(10000000).

    Tu ajoutes function2 qui ne fait que do(input) sans vérification de type. Tu peux constater que tu as un facteur 2 entre les deux versions.

    Avec la fonction du commentaire https://linuxfr.org/nodes/94784/comments/1367242

    def do(it):
     for i in it:
     pass
    print timeit.timeit("function(xrange(10000000))", "from __main__ import function", number=100)
    # 21.3466279507
    print timeit.timeit("do(xrange(10000000))", "from __main__ import do", number=100)
    # 21.0114998817
    
    

    Maintenant tu remodifies ton code pour faire une boucle dans laquelle tu appelles function avec 1 en paramètre puis ensuite function2 avec [1]. La maintenant tu as plus d'un facteur 4.

    print timeit.timeit("function(1)", "from __main__ import function", number=100000)
    #0.276041984558
    print timeit.timeit("do([1])", "from __main__ import do", number=100000)
    #0.033077955246
    print timeit.timeit("function(xrange(100000))", "from __main__ import function", number=1)
    #0.00220608711243
    
    

    Rien à dire. Sauf que le premier qui m'appelle 100000 fois function avec un simple objet au lieu de m'appeler une fois function avec une liste de 100000 objets alors que function est prévu pour prendre un itérable, je l'envoie chier en lui conseillant de prendre des cours de dev.

    L'optimisation ça se fait, quand ça marche, quand c'est nécessaire et là où c'est nécessaire.

    Matthieu Gautier|irc:starmad