Choisi par Google comme l'un de ses langages piliers et utilisé dans des projets d'envergure tels que YouTube, Python est omniprésent dans les applications web modernes. Open Source et portable, sa modularité et son orientation objet permettent de créer des applications de toutes tailles, génériques et maintenables. Python : de la syntaxe à l'optimisation Python est tout indiqué pour le développement d'applications web : serveurs de contenu, moteurs de recherche, agents intelligents, objets distribués... Il est également performant pour réaliser des scripts d'administration système ou d'analyse de fichiers textuels, pour gérer l'accès à des bases de données, pour servir de langage glu entre plusieurs applications, réaliser des applications graphiques classiques, etc. Pour autant, le développeur n'exploitera vraiment sa puissance qu'en ayant acquis une certaine culture. C'est ce que ce livre permet d'acquérir par la description de techniques éprouvées dans tous les grands projets de développement en Python. Au-delà de la prise en main (installation des environnements d'exécution et de développement, rappels de syntaxe avec les primitives et la bibliothèque standard), cet ouvrage aborde les bonnes pratiques de développement Python, depuis les conventions de nommage et les design patterns objet les plus courants jusqu'à la programmation dirigée par les tests et l'optimisation de code. Enrichie en nouveaux cas pratiques et exercices, cette édition mise à jour pour Python 2.6 détaille également le script de migration 2to3 vers Python 3 et présente la bibliothèque ctypes qui permet de manipuler les structures de données en C/C++. À qui s'adresse cet ouvrage? Au développeur souhaitant s'initier à un nouveau langage et réaliser des applications web ; Aux développeurs Python souhaitant aller plus loin dans les bonnes pratiques de développement (programmation orientée objet, performances, tests unitaires...). Choisir Python......Page 8 Table des matières......Page 12 Pourquoi ce livre ?......Page 32 À qui s’adresse l’ouvrage ?......Page 33 Remerciements......Page 34 Première partie - Découverte de Python......Page 38 Python ?......Page 40 Portable......Page 41 Hautement productif......Page 42 Python et les autres langages......Page 43 Ruby, PHP, Java.........Page 44 2 - Python pour quels usages ?......Page 46 Manipuler des fichiers et des dossiers......Page 47 Manipuler des programmes......Page 48 Envoyer et recevoir des courriers électroniques......Page 50 Échanger des informations avec d’autres systèmes......Page 52 Syntaxe......Page 54 Structures de données......Page 55 Manipulation de texte......Page 56 Objectif d’une maquette......Page 57 Maquette d’interfaces......Page 58 Exemple de prototype de bibliothèque......Page 59 Création ou utilisation d’outils spécialisés......Page 61 Conception d’interface utilisateur......Page 62 Sérialisation des objets......Page 63 Les bases de données relationnelles......Page 65 Applications web......Page 66 En un mot.........Page 67 Installation sous Linux......Page 68 Paquets Debian......Page 69 Compilation des sources......Page 70 Options de compilation......Page 71 Compilation et installation de Python......Page 73 Installation sous MS-Windows......Page 74 Premiers tests de Python en mode interactif......Page 76 Script de démarrage du mode interactif......Page 77 Le choix d’un éditeur......Page 78 La coloration syntaxique......Page 79 L’autocomplétion......Page 80 Les plates-formes reconnues......Page 81 En un mot.........Page 83 Deuxième partie - Éléments du langage......Page 84 4 - Syntaxe du langage......Page 86 print devient fonction......Page 87 Modèle de données......Page 89 Littéraux alphanumériques......Page 91 Normes ASCII et Unicode......Page 92 Évolution de l’Unicode de Python 2 à Python 3......Page 93 Caractères spéciaux......Page 94 Littéraux numériques......Page 95 Littéraux pour les entiers......Page 96 Littéraux pour les valeurs à virgule flottante......Page 98 Les types standards......Page 99 NotImplemented......Page 100 Les nombres entiers......Page 101 Les nombres à virgule flottante......Page 102 Les séquences......Page 103 Les séquences immuables......Page 104 Les séquences modifiables......Page 109 Les mappings......Page 113 Opérateurs de base......Page 118 Modulo......Page 119 Appartenance......Page 120 Opérateurs de comparaison......Page 122 Ordre de traitement des opérations......Page 123 L’indentation......Page 124 Les structures conditionnelles......Page 125 L’instruction for..in......Page 126 L’instruction while......Page 128 L’instruction with......Page 129 En un mot.........Page 132 Fonctions......Page 134 Contexte d’exécution et directive global......Page 135 Directive return......Page 136 Paramètres explicites et valeurs par défaut......Page 137 Les paramètres non explicites......Page 139 Les paramètres arbitraires......Page 140 Signatures multiples de fonctions......Page 141 Documentation strings (docstrings)......Page 142 Decorators......Page 143 Définition......Page 148 Espace de noms......Page 149 Héritage......Page 150 Héritage multiple......Page 151 Surcharge des attributs......Page 152 Constructeur et destructeur......Page 153 Attributs privés......Page 154 Représentation et comparaison de l’objet......Page 156 Accès aux attributs de l’objet......Page 158 Utilisation de l’objet comme conteneur......Page 159 Utilisation de l’objet comme type numérique......Page 161 New-style classes......Page 163 Le nouveau Method Resolution Order......Page 164 Constructeur statique......Page 165 Surcharge de type() par metaclass......Page 166 Descriptors......Page 167 Properties......Page 168 Slots......Page 169 Modules......Page 170 Directive import......Page 171 Primitive reload......Page 172 Directives from et as......Page 173 Organisation d’un paquet......Page 174 Import * et __all__......Page 175 Exceptions......Page 176 Exceptions du langage......Page 177 Classes d’exceptions de base......Page 178 try..except..else......Page 179 try..except..finally......Page 181 Les list comprehensions......Page 182 Iterators......Page 184 Generators......Page 185 Generator expression (genexp)......Page 186 En un mot.........Page 187 6 - Les primitives......Page 188 __import__ : __import__(nom, globals={}, locals={}, fromlist=[], level=- 1) -> module......Page 189 any : any(iterable) -> booléen......Page 190 classmethod : classmethod(fonction) -> méthode......Page 191 coerce : coerce(x, y) -> (x1, y1)......Page 193 compile : compile(source, fichier, mode[, flags[, dont_inherit]]) -> objet code......Page 194 dir : dir([objet]) -> liste d’attributs......Page 195 eval : eval(source[, globals[, locals]]) -> valeur......Page 197 file : file(nom[, mode[, buffering]]) -> objet file......Page 198 filter : filter(fonction ou None, séquence) -> list, tuple, ou string......Page 200 globals : globals() -> dictionnaire......Page 201 help : Fonction d’aide en ligne......Page 202 id : id(objet) -> entier......Page 203 intern: intern(string) -> string......Page 204 issubclass : issubclass(C, B) -> bool......Page 205 len : len(objet) -> entier......Page 206 license : license() -> prompt interactif......Page 207 map : map(fonction, séquence[, séquence...]) -> liste......Page 208 min : min(séquence) -> valeur......Page 209 ord : ord(caractère) -> entier......Page 210 property : property(fget=None, fset=None, fdel=None, doc=None) -> attribut propriété......Page 211 range : range([start,] stop[, step]) -> liste d’entiers......Page 212 raw_input : raw_input([prompt]) -> string......Page 213 repr : repr(objet) -> représentation......Page 214 set : set(iterable) -> objet de type set......Page 215 slice : slice([start,] stop[, step])......Page 216 sorted : sorted(iterable, cmp=None, key=None, reverse=False) -> liste triée......Page 217 staticmethod : staticmethod(fonction) -> méthode statique......Page 218 sum : sum(sequence, start=0) -> valeur......Page 219 super : super(type, objet) -> objet super lié à l’objet......Page 220 type : type(nom, bases, dict) -> nouveau type......Page 221 unicode : unicode(string [, encoding[, errors]]) -> objet......Page 222 zip : zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0]...), (...)]......Page 223 AssertionError......Page 224 IOError......Page 225 KeyError......Page 226 NotImplementedError......Page 227 SyntaxError......Page 228 TypeError......Page 229 UnicodeDecodeError......Page 230 Avertissements......Page 231 PendingDeprecationWarning......Page 232 En un mot.........Page 233 7 - Conventions de codage......Page 234 Taille maximum d’une ligne......Page 235 Commentaires......Page 236 Blocs de commentaires......Page 237 Documentation strings ou docstrings......Page 238 Espacement du code......Page 239 Espaces dans les expressions et définitions......Page 240 Conventions de nommage......Page 241 Modules......Page 242 Fonctions et variables globales d’un module, méthodes et attributs d’une classe......Page 243 Encodage......Page 244 Docstring de module......Page 245 Les jokers......Page 246 Organisation des clauses......Page 247 Structuration d’une classe......Page 248 Du sens......Page 249 Modules......Page 250 Méthodes et fonctions......Page 251 En un mot.........Page 252 Troisième partie - La bibliothèque standard......Page 254 8 - Principaux modules......Page 256 exit()......Page 257 platform......Page 258 Accès au système......Page 259 Opérations sur les descripteurs de fichiers......Page 260 Manipulation des fichiers et répertoires......Page 262 Manipulation des processus......Page 270 Informations sur le système......Page 276 class Popen......Page 278 os.path......Page 280 platform......Page 282 copytree(src, dst[, symlinks [, ignore]])......Page 284 move(src, dst)......Page 285 class dircmp(a, b[, ignore[, hide]]) -> instance......Page 286 class GzipFile([filename[, mode[, compresslevel[, fileobj]]]])......Page 288 open(fichier[, mode[, compresslevel]])......Page 289 class ZipFile(fichier[, mode[, compression]])......Page 291 Programmation réseau......Page 293 urllib2......Page 294 ftplib......Page 297 En un mot.........Page 300 Persistance......Page 302 load(fichier) -> objet......Page 303 loads(chaîne [, protocole]) -> objet......Page 304 shelve......Page 305 open(nom_fichier[, flag[, protocole[, writeback]]])......Page 306 b64decode(chaîne[, altchars]) -> chaîne......Page 307 haslib.md5......Page 308 hashlib.sha......Page 309 fonctions de conversion......Page 310 fonctions trigonométriques......Page 311 constantes......Page 312 array(typecode[, initializer]) -> tableau......Page 313 abc......Page 315 Le type deque......Page 318 Le type defaultdict......Page 319 Les Abstract Base Classes......Page 321 class Decimal([value [, context]])......Page 322 Utilitaires divers......Page 323 atexit......Page 324 Le mode pas-à-pas......Page 325 Alias et fichier .pdbrc......Page 329 Le mode post mortem......Page 330 getpass......Page 331 copy......Page 332 Affichage des différences......Page 333 Restauration......Page 335 UTC/GMT......Page 336 Fonctions de manipulation......Page 337 Formatage des dates......Page 338 class timedelta(weeks, days, minutes, hours, seconds, microsecondes, milliseconds)......Page 340 class date......Page 341 class time......Page 343 random......Page 345 En un mot.........Page 346 chain(*itérables) -> itérateur......Page 348 cycle(itérable) -> itérateur......Page 349 groupby(itérable[, keyfunc]) -> itérateur......Page 350 ifilterfalse(prédicate, itérable) -> itérateur......Page 351 izip(*itérables) -> itérateur......Page 352 starmap(fonction, séquence) -> itérateur......Page 353 Expressions régulières ?......Page 354 Symboles simples......Page 356 Symboles de répétition......Page 358 Symboles de regroupement......Page 360 Exemples plus complets......Page 361 Fonctions et objets de re......Page 362 La classe Tk......Page 365 Les widgets de base de Tkinter......Page 366 Positionnement d’un widget......Page 367 Options et méthodes d’un widget......Page 368 Binding d’événements......Page 376 Application type avec Tkinter......Page 378 Le module lib2to3 et le script 2to3......Page 380 En un mot.........Page 382 Mode d’emploi du chapitre......Page 384 Solution......Page 385 Discussion......Page 386 Description......Page 388 Discussion......Page 389 Description......Page 390 Discussion......Page 391 Extension......Page 392 Solution......Page 393 Extension......Page 394 Solution......Page 395 Discussion......Page 396 Solution......Page 397 Solution......Page 398 Discussion......Page 399 Extension......Page 400 Solution......Page 401 Extension......Page 405 Solution......Page 406 Extension......Page 408 Solution......Page 409 Discussion......Page 410 Description......Page 411 Description......Page 412 Solution......Page 413 Discussion......Page 415 Solution......Page 416 Discussion......Page 418 Solution......Page 419 Discussion......Page 420 En un mot.........Page 421 Quatrième partie - Techniques avancées......Page 422 12 - Programmation dirigée par les tests......Page 424 Barrière culturelle......Page 425 Tests unitaires......Page 426 Construction d’un test unitaire......Page 427 Évolution des use cases......Page 428 Non-régression......Page 429 Tests plus complexes : raconter une histoire......Page 431 Les bouchons......Page 432 Qualité des tests......Page 437 Tests de l’interface......Page 438 Dépendance forte à l’outil utilisé et au type d’interface......Page 439 unittest......Page 440 Définition des test cases......Page 441 Organisation d’une campagne de tests......Page 444 Exécution des doctests......Page 448 Syntaxe des doctests......Page 449 Environnement et options d’exécution......Page 452 doctests dans un fichier texte séparé......Page 457 Script de test......Page 460 Coverage......Page 461 Intégration dans l’environnement d’un projet......Page 464 Le futur de PyUnit......Page 465 En un mot.........Page 467 13 - Bonnes pratiques et optimisation du code......Page 468 Profiling......Page 469 Le module profile......Page 470 Le module hotshot......Page 471 Le module cProfile......Page 472 Le module pstats......Page 473 hotshot et pstats......Page 474 timeit......Page 475 Amélioration des performances......Page 477 Trier des valeurs......Page 478 Concaténer des chaînes......Page 481 Remplacer certains tests par une gestion d’exception......Page 482 Minimiser les appels et rapprocher le code......Page 483 Utiliser les list comprehensions......Page 485 Préférer les fonctions d’itertools......Page 486 Caching......Page 487 Ressources partagées : difficultés de programmation......Page 489 Le module threading......Page 491 Le module Queue......Page 499 Le Global Interpreter Lock et multiprocessing......Page 500 Environnement de compilation......Page 501 Binding de bibliothèque......Page 502 Création d’un module d’extension......Page 506 Optimisation de l’utilisation de mémoire vive......Page 512 Économie de mémoire......Page 513 Psyco......Page 514 Cython......Page 516 Les tests de performance continus......Page 517 Tests de performance ciblés......Page 518 decorator timed......Page 519 En un mot.........Page 522 Principes généraux......Page 524 Typage de Liskov......Page 525 Encapsulation......Page 527 Héritage......Page 529 Polymorphisme......Page 530 Duck typing et interfaces......Page 532 Relations entre objets......Page 533 Relation multiple......Page 534 Héritage multiple......Page 535 Garbage collecting......Page 536 Patterns de génération d’objets......Page 537 Singleton et Borg......Page 538 Factory......Page 541 Visitor......Page 542 Observer......Page 544 Memento......Page 547 Chain of responsibility......Page 550 State......Page 553 Adapter......Page 555 Facade......Page 557 Proxy......Page 558 En un mot.........Page 559 Environnement de développement......Page 560 Indentation du code......Page 561 Le projet Amoeba......Page 562 PythonLabs et BeOpen.com......Page 563 Python et Zope......Page 564 B - Bibliothèques tierces......Page 568 Installer une bibliothèque externe......Page 569 Utilisation de setuptools......Page 570 mysql-python......Page 572 Traitement de texte......Page 573 Packaging, distribution......Page 574 guitest......Page 575 Win32 Extensions......Page 576 PyGTK......Page 577 reStructuredText......Page 578 vpython......Page 579 Bibliothèques scientifiques......Page 580 Web......Page 581 Flux RSS......Page 582 Blogs......Page 583 Sites......Page 584 C......Page 586 E......Page 587 I......Page 588 M......Page 589 P......Page 590 S......Page 591 V......Page 592 Z......Page 593