From 3569c00af1a50e188313ccab21df758403ea4fe4 Mon Sep 17 00:00:00 2001 From: Benjamin Bohard Date: Tue, 8 Jan 2013 15:24:39 +0100 Subject: [PATCH] relecture de la formation --- python/formation/specialmethods.txt | 34 ++++++++++++++--------------- python/formation/stdlib.txt | 2 +- python/formation/structures.txt | 28 ++++++++++++------------ python/formation/testsunitaires.txt | 18 +++++++-------- 4 files changed, 41 insertions(+), 41 deletions(-) diff --git a/python/formation/specialmethods.txt b/python/formation/specialmethods.txt index 2cb5b12..2b3954e 100644 --- a/python/formation/specialmethods.txt +++ b/python/formation/specialmethods.txt @@ -3,7 +3,7 @@ Programmation python courante .. _namespaces: -les espaces de nommage +Les espaces de nommage ----------------------- Packages et modules:: @@ -15,9 +15,9 @@ Packages et modules:: __init__.py module2.py -A utilser pour organiser votre projet -Permet de minimiser les risques de conflits de nome -Permet de diminuer les entrées dans le :envvar:`PYTHONPATH` +À utilser pour organiser votre projet. +Permet de minimiser les risques de conflits de nom. +Permet de diminuer les entrées dans le :envvar:`PYTHONPATH`. :: @@ -35,31 +35,31 @@ Permet de diminuer les entrées dans le :envvar:`PYTHONPATH` from os import * -lance un module en tant que script : +Lancer un module en tant que script : :: if __name__ == "__main__": main() -Organisation modulaire +Organisation modulaire : -- construire des composants élémentaires -- combiner ces composants +- construire des composants élémentaires ; +- combiner ces composants ; - utiliser une structure pyramidale : les composants sont les éléments de composants plus complexes. -- découplage de l'ensemble en composants indépendants (gros programmes réalisables) -- donner de la structure (rendre les gros programmes compréhensibles) -- spécifier les liens entre les composants (rendre les programmes maintenables) -- identifier les sous-composants indépendants (rendre les programmes réutilisables) -- forcer l'abstraction (augmenter la sureté du programme) +- découplage de l'ensemble en composants indépendants (gros programmes réalisables) ; +- donner de la structure (rendre les gros programmes compréhensibles) ; +- spécifier les liens entre les composants (rendre les programmes maintenables) ; +- identifier les sous-composants indépendants (rendre les programmes réutilisables) ; +- forcer l'abstraction (augmenter la sureté du programme). Les méthodes spéciales ----------------------- -méthodes spéciales correspondants aux interfaces des types de bases : +Méthodes spéciales correspondant aux interfaces des types de bases : .. function:: __init__(self, *args, **kwargs) le constructeur de l'instance d'objet @@ -106,9 +106,9 @@ aux attributs est règlable. >>> cobj.__dict__['insattr'] 'an instance attribute' -les attributs ne sont pas systématiquement encapsulées en python. +Les attributs ne sont pas systématiquement encapsulés en python. -pour contrôler l'accès aux attributs, on utilise les méthodes spéciales:: +Pour contrôler l'accès aux attributs, on utilise les méthodes spéciales:: __getattr__(self, name) @@ -139,7 +139,7 @@ pour contrôler l'accès aux attributs, on utilise les méthodes spéciales:: Dict with a default value -------------------------- -il est possible d'hériter des types de base +Il est possible d'hériter des types de base >>> a = dict.defaultdict(default=0) >>> a diff --git a/python/formation/stdlib.txt b/python/formation/stdlib.txt index e2c5594..97e6c12 100644 --- a/python/formation/stdlib.txt +++ b/python/formation/stdlib.txt @@ -134,7 +134,7 @@ Password: .. module:: shelve :synopsis: linéarisation de données -linéarisation de données +Linéarisation de données ========================== >>> import shelve diff --git a/python/formation/structures.txt b/python/formation/structures.txt index 0257958..36bfbda 100644 --- a/python/formation/structures.txt +++ b/python/formation/structures.txt @@ -60,7 +60,7 @@ deux 1 >>> -fonctions +Fonctions ----------- >>> def blabla(x): @@ -69,7 +69,7 @@ fonctions ... >>> -il n'y a que des fonctions (et pas de procédures): +Il n'y a que des fonctions (et pas de procédures): >>> def ma_func(x): @@ -147,13 +147,13 @@ argumments nommés {'tata': 3, 'tutu': 2} >>> vars(a) {'a': 'titi', 'b': 'toto'} -puisque tout est objet en python, ``vars(mon_objet)`` est équivalent à +Puisque tout est objet en python, ``vars(mon_objet)`` est équivalent à ``mon_objet.__dict__`` - générateurs et compréhension de liste -les compréhensions de listes permettent de générer de nouvelles listes +Les compréhensions de listes permettent de générer de nouvelles listes exemple : @@ -169,7 +169,7 @@ exemple : [(2, 4), (2, 5), (2, 6), (2, 7), (3, 4), (3, 5), (3, 6), (3, 7), (4, 4), (4, 5), (4, 6), (4, 7)] >>> -les expressions générateurs +Les expressions générateurs >>> expr = (2*i for i in range(10)) >>> expr @@ -190,10 +190,10 @@ les expressions générateurs >>> -le polymorphisme paramétrique +Le polymorphisme paramétrique ----------------------------- -polymorphisme exemple de contexte : +Polymorphisme exemple de contexte : la fonction print >>> print 1 @@ -203,7 +203,7 @@ la fonction print .. todo:: `print 1` et `print "1"` renvoient le même résultat. Pourquoi ? -la programmation par exceptions +La programmation par exceptions ------------------------------------- >>> def function_raise(x): @@ -224,7 +224,7 @@ Pas le bon type ou bien lever une exception -programmation objet +Programmation objet -------------------- - la programmation objet définit des classes @@ -249,13 +249,13 @@ hello - définition d'une classe : -méthode classique : +Méthode classique : >>> class A: ... pass ... -méthode dynamique (la fonction :func:`type` est ici un **constructeur** : +Méthode dynamique (la fonction :func:`type` est ici un **constructeur** : >>> type("A", (), {}) @@ -264,16 +264,16 @@ méthode dynamique (la fonction :func:`type` est ici un **constructeur** : >>> type(a) -types et classe +Types et classe ~~~~~~~~~~~~~~~~~ -affichage d'une calculette, il faut créer un type `Touche` +Affichage d'une calculette, il faut créer un type `Touche` qui contient deux désignations : `Chiffre` et `operation`:: type operation = Plus | Moins | Divise type touche = Chiffre of int | Memoire | Op of operation -soit, on définit un type touche, soit on ne définit pas ce type:: +Soit on définit un type touche, soit on ne définit pas ce type:: type operation = Plus | Moins | Divise type memoire = Memoire diff --git a/python/formation/testsunitaires.txt b/python/formation/testsunitaires.txt index 42bdc32..69b1130 100644 --- a/python/formation/testsunitaires.txt +++ b/python/formation/testsunitaires.txt @@ -3,14 +3,14 @@ Tests unitaires et pile d'appels Les tests automatiques sont un complément à la déclaration des types. -que tester, quoi tester ? +Que tester, quoi tester ? - que les composants interagissent bien entre eux - que les unités (fonctions, objets...) réagissent bien à une entrée spécifique - que le code se comporte de la manière attendue dans des environnements différents (systèmes d'exploitation, etc...) -les types de tests : +Les types de tests : - tests unitaires - tests fonctionnels @@ -52,7 +52,7 @@ http://pytest.org/latest/ - écrire un fichier commençant par `test_` qui teste les fonctions du fichier -options utiles dans `py.test` +Options utiles dans `py.test` ------------------------------ :: @@ -67,10 +67,10 @@ options utiles dans `py.test` py.test -k test_simple -utiliser la pile d'appel pour débugger +Utiliser la pile d'appel pour débugger --------------------------------------- -utiliser la pile d'appels, elle se lit de bas en haut. Il est possible de +Utiliser la pile d'appels, elle se lit de bas en haut. Il est possible de provoquer cette pile d'appels. :: @@ -79,7 +79,7 @@ provoquer cette pile d'appels. traceback.print_exc() -traiter une exception avec +Traiter une exception avec :: @@ -95,9 +95,9 @@ traiter une exception avec bla bla -créer le plus possible ses propres exceptions spécifiques au programme +Créer le plus possible ses propres exceptions spécifiques au programme. -utiliser le module :mod:`pdb` +Utiliser le module :mod:`pdb` .. module:: pdb :synopsis: debugger de la lib standard @@ -144,7 +144,7 @@ Remarquons que :mod:`pdb` utilise le module :mod:`cmd`, voir :ref:`cmdlabel` qu' (Pdb) -last but not least : +Last but not least : utiliser pylint ou pychecker