• Optimisation

Document Actions
Réponses: 6   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

 • Optimisation

Posté par fcarlier le 23/04/2008 17: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

Posté par rsaikali le 23/04/2008 20: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 :
code:
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

Posté par fcarlier le 23/04/2008 20: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

Posté par rsaikali le 23/04/2008 22: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 :
code:
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 ??

light Re: Optimisation

Posté par kerflyn le 24/04/2008 14:30
code:
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 :

code:
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

Posté par fcarlier le 24/04/2008 14:44
Bonjour,

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

Merci

Encore des améliorations ??

 • Re: Optimisation

Posté par alexd le 01/05/2008 18: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:

code:
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 ...