17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

444<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

La notation liste[:] permet d’affecter des éléments à un objet liste sans avoir à<br />

recréer d’objet, afin d’obtenir un tri inplace.<br />

Ce code pattern, valable pour toutes les versions de Python, peut être adapté pour<br />

trier des séquences entre elles, en fournissant par exemple un entier qui détermine la<br />

position de la valeur à utiliser comme clé de tri.<br />

Concaténer des chaînes<br />

Une opération très fréquente en Python consiste à concaténer des chaînes de caractères.<br />

La raison en est relativement simple : les objets de type string étant des<br />

séquences immuables, il est nécessaire de recréer un objet lorsque l’on souhaite modifier<br />

des éléments de la chaîne.<br />

La première idée qui vienne à l’esprit lorsque l’on concatène des chaînes est de boucler<br />

sur les éléments pour les mettre bout à bout.<br />

Concaténation<br />

>>> chaine = ''<br />

>>> for i in range(10):<br />

... chaine += str(i)<br />

...<br />

>>> chaine<br />

'0123456789'<br />

Avant la version 2.4 de Python, ce genre d’écriture était catastrophique, car chaque<br />

itération entraînait une création d’un nouvel objet string en mémoire.<br />

Le code pattern le plus communément adopté était d’utiliser un objet liste pour la<br />

préparation des éléments à concaténer, puis d’appeler la méthode join() d’un objet<br />

string vide.<br />

Concaténation par join()<br />

>>> chaine = [str(i) for i in range(10)]<br />

>>> chaine = ''.join(chaine)<br />

>>> chaine<br />

'0123456789'<br />

Cette méthode reste valable pour les versions de Python inférieures à la 2.4 mais est à<br />

présent obsolète, voire légèrement plus lente qu’une concaténation classique si une<br />

list comprehension n’est pas utilisée : le code interne de Python a été modifié pour ne<br />

plus créer d’objets intermédiaires lorsque des chaînes sont concaténées.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!