Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Optimisation

Optimisation

Remonter à Forum général Python
  • Optimisation

    Envoyé par fcarlier le 23 Avril 2008 à 16:29
    Bonjour,

    Petite question sur l'optimisation de code python :

    Au lieu de :
    def create_uri(environ):
        if environ['QUERY_STRING'] == '':
            uri = 'http://127.0.0.1' + environ['PATH_INFO']
        else:
            uri = 'http://127.0.0.1' + environ['PATH_INFO'] + '?' + environ['QUERY_STRING']
        return uri


    mettre :
    def create_uri(environ):
        uri = 'http://127.0.0.1'' + environ['PATH_INFO']
        if environ['QUERY_STRING'] != '':
            uri = 'http://127.0.0.1'' + environ['PATH_INFO'] + '?' + environ['QUERY_STRING']
        return uri
    Merci pour votre réponse
    Flo
    • Re: Optimisation

      Envoyé par rsaikali le 23 Avril 2008 à 19:10
      En effet, la deuxième est un peu mieux niveau clarté du code (c'est un point de vue personnel).
      Je ne parlerais pas d'optimisation de performances, car ça ne change pas grand chose, à moins que ta méthode ne soit appelée des milliers de fois par seconde.

      Pour chipoter jusqu'au bout, une version encore plus claire serait même :

      def create_uri(environ):
      uri = 'http://127.0.0.1'' + environ['PATH_INFO']
      if environ['QUERY_STRING'] != '':
      uri = uri + '?' + environ['QUERY_STRING']
      return uri


      Voilou.
    • Re: Optimisation

      Envoyé par fcarlier le 23 Avril 2008 à 19:15
      OK j'aime bien ta proposition !!!
      Effectivement cette méthode va être appele énormément car elle se trouve entre le client et le serveur (sorte de proxy transparent)

      Merci
    • Re: Optimisation

      Envoyé par rsaikali le 23 Avril 2008 à 21:29
      Alors en effet, mieux vaut l'optimiser alors...

      Après je ne suis pas (encore) assez expert en python pour te dire si il vaut mieux au niveau perfo :
      1. Accéder deux fois à un dictionnaire (environ['QUERY_STRING'] dans ta méthode)
      ou
      2. Affecter une variable intermédiaire pour stocker une fois le contenu de environ['QUERY_STRING'].

      Ce qui donnerait du coup :

      def create_uri(environ):
      uri = 'http://127.0.0.1' + environ['PATH_INFO']
      query_string = environ['QUERY_STRING']
      if query_string != '':
      uri = uri + '?' + query_string
      return uri

      Un vrai champion de l'optimisation dans l'assistance ??
    • Re: Optimisation

      Envoyé par kerflyn le 24 Avril 2008 à 13:30

      def create_uri(environ):
      q_st = environ['QUERY_STRING']
      return 'http://127.0.0.1' + environ['PATH_INFO'] + (q_st and ('?' + q_st))


      Ou, depuis la 2.5 :


      def create_uri(environ):
      q_st = environ['QUERY_STRING']
      return 'http://127.0.0.1' + environ['PATH_INFO'] + (('?' + q_st) if q_st else '')

    • Re: Optimisation

      Envoyé par fcarlier le 24 Avril 2008 à 13:44
      Bonjour,

      J'ai bien fait de poser la question finalement !!

      Merci

      Encore des améliorations ??
    • Re: Optimisation

      Envoyé par alexd le 1 Mai 2008 à 17:39
      Bonjour,

      Il me semble qu'utiliser l'opérateur de formatage des chaînes à la place de l'opérateur de concatenation pourrait s'avérer plus rapide (on evite de creer une chaine intermediaire à partir des deux premiers, que l'on concatene à la troisième pour obtenir le resultat)

      En pratique ton code deviendrait qqch comme:

      def create_uri(environ):
      q_st = environ['QUERY_STRING']
      return 'http://127.0.0.1%s%s' %(environ['PATH_INFO'], (('?%s' %q_st) if q_st else ''))


      A benchmarker en vrai ...
    • Re: Optimisation

      Envoyé par gbellity le 9 Janvier 2009 à 16:13
      Je confirme qu'il faut benchmarker, mais on constate que

      "+" va plus vite que "%" donc :

      def create_uri(environ):
      q_st = environ['QUERY_STRING']
      return 'http://127.0.0.1' + environ['PATH_INFO'] + (('?' + q_st) if q_st else '')
Rendu par Ploneboard