3.62k likes | 5.88k Views
Formation Python. “Life is short (You need Python)” -- Bruce Eckel ANSI C++ Comitee member, author of «Thinking in C++» and «Thinking in Java». Présentation d’un langage de programmation. Gaël Rospabé (cours et exercices) / Sabine Elles (exercices)
E N D
Formation Python “Life is short(You need Python)” -- Bruce Eckel ANSI C++ Comitee member, author of «Thinking in C++» and «Thinking in Java» Présentation d’un langage de programmation Gaël Rospabé (cours et exercices) / Sabine Elles (exercices) Jean Jacquemier (support exercices)
Plan • Les fonctions • Gestion des exceptions • Entrées sorties • stdin/stout • fichiers • Classes • Commandes systèmes et modules utiles • Module os • Module re • Module sys • Module subprocess • Exemples • Pages web lapp • PyROOT • Documentation • Introduction • Domaines d’application • Forces et faiblesses • Versions disponibles au lapp • Script et langage python • Quelques remarques utiles • Modules et packages • Importer (exo) • Modules utiles de la Cheese Shop • Types de données standard • Types numériques • Séquences • Chaines de caractères (exo) • N-uplets et listes (exo) • Dictionnaires (exo) • sets (ou ensemble) (exo) • Structures de contrôle • if/else • for/while/do (exo)
Introduction Introduction • Langage dynamiquement interprété • Développé et maintenu depuis 1989 par Guido Van Rossum • Open source pour interpréteur et bibliothèque standard • Orienté objet/Ramasse miettes/Facile d’utilisation (d’appréhension)/souplesse • Système de gestion d’exceptions • Nombreux types d’utilisation/bibliothèque spécialisées
Introduction Domaines d’application • Administration système • Applications Web • Extension ou scriptage de C++/C(cPython)/Java(JyThon)/Net(IronPython) • Interfaces graphiques : usage interactif • Remplacement environnements calcul (Matlab, IDL, …)
Introduction Forces et faiblesses de Python • Forces : • Typage dynamique • Langage de script • Clarté, compacité, portabilité (multiplateforme, moins de maintenance, 5 à 10 fois moins de ligne de code que C/C++/Fortran/…) • Vitesse de développement • Erreurs facilement repérables : pas de pointeurs, pile d’appel des fonctions • Pas de compilation : une seule erreur visible mais reste du code tourne => robustesse du code • Grande communauté • Faiblesses • Lenteur à l’exécution • Pas de binaire compilé en natif (.pyc) • Peu d’optimisation de la part de l’interpréteur • Pas de vérification statique du typage • Pas de multithreading (mais librairie multiprocessing) • Addiction très facile
Introduction Versions disponibles au Lapp • Par défaut : 2.3.4 dans /usr/bin/python • python –V (donne version) • which python (quel python utilisé) • Autres versions dispo avec ≠ expériences : • Ex : /grid_sw/lhcb/lib/lcg/external/Python/ • 2.4.2 et 2.5 • Pour avoir modules utiles : • setenv PYTHONPATH /LINUX/LAPPSL4/Python • setenv PATH ${PYTHONPATH}/bin:${PATH} • Environnement • Auto complétion des commandes et des méthodes • Historique des sessions précédentes cp /lapp_data/calcul/supap/tools/.pythonrc.py $HOMEcp /lapp_data/calcul/supap/tools/setup_python-2.4.4.csh . source setup_python-2.4.4.csh
Introduction Script et langage Python • Peu de ponctuation • Pas de point virgule ";" à la ligne • Tabulations/4 espaces significatifs écrire un joli code : • En interactif : • ~>python • >>> commandes • Rappel de commandes (+sessions précédentes) • Une instruction par ligne • # pour commenter jusqu’à la fin de la ligne • Pour sortir de python : Ctrl+d • Scripts avec exécution d’un fichier (extension .py) • python script.py if toto==1: print ”coucou” result=2 else : result=3 if ($toto==1) then { print ”coucou”; result=2;} else {result=3;}
Script et langage Python Quelques remarques utiles (I) • Pas de déclarations des variables (que des identifiants : dynamiquement typés) • La notion d’adresse d’un objet n’existe pas • Tous les éléments manipulables sont des objets c.a.d instances de classes, Classes, Fonctions, Nombres, Chaînes de caractères… • Identifiants servent à référencer les objets • Abus de langage : type d’un identifiant == type de l’objet qui lui est associé
Script et langage Python Quelques remarques utiles (II) • Identifiant principalement créé avec =, def et class • Identifiants doivent commencer par une lettre ou un "_" et peuvent contenir lettre, chiffres et le caractère "_" • Noms de fichiers doivent être construits comme des identifiants pour pouvoir être importés • Les variables doivent être instanciées directement x => ne marche pas a=1 a,b=1,2 s = "toto" Identifiant Objet a=1 a 1 b=2 b 2 b=a a=a+1
Script et langage Python Portées des variables • Variables locals, globals • Les variables globales sont visibles avec globals() • Les localsne sont visibles que localement (fonctions, classes), visualisation avec locals() • Module __builtin__ • Espace des noms pré-définis dans Python (print, dir, list, dict,str,…) • print dir(__builtins__) permet de visualiser la liste des objetsprédéfinis
Script et langage Python Modules et packages Il existe deux modes de déclarations d'objets python (variable, classes, fonctions,…) • un module est un fichier ayant une extension de type .py qui regroupe des déclarations d'objets (existe également sous forme de librairie dynamique ) • un package est un répertoire dans lequel est défini un fichier __init.py__ regroupant un ensemble de modules ou de sous-packages (organisation en sous-répertoires possible) La localisation des modules et des packages est définie par la variable d'environnement PYTHONPATH
Script et langage Python Importer • On peut importer le contenu d’un module avec la commande import : • Une partie d’un module, il n’est plus nécessaire de préciser les identifiants par le nom du module : • Fonction dir() permet de lister le contenu d’un objet (builtins, fonctions, …) • Fonctionhelp() : aide sur les modules import sys, os printsys.modules["os"] visualisation du nom du fichier physique importé < module 'os' from '/usr/lib64/python2.3/os.pyc'> os.pathoufromos import path path import os printdir(os) ['EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR’,…] help(os) help(os.path)
Script et langage Python Importer from os import * • Pour importer l’ensemble du contenu d’un module ( tous les identifiants sont importés exceptés ceux dont le nom commence par __) • Il est recommandé de ne pas importer l'ensemble du contenu d'un module si cela n'est pas nécessaire : Masquage des noms déjà définis • Pour visualiser l'ensemble des identifiants importables par un module : print (<nom_module>.__all__) • Ne pas importer (charger) trop de modules : saturation mémoire (lenteur) from os import * (masque la fonction open())
Script et langage Python Importer mon_repertoire/calibration/ piedestal.py __init.py__ • Exemple : • Ordre : • Il faut que <mon_répertoire> soit dans PYTHONPATH import calibration : charge __init.py__ charge piedestal.py si piedestal.py estdéfinidans __init.py__ from calibration import piedestal: charge calibration/piedestal.py calibration.so calibration.dll calibration.pyc (si +récentque .py) ( fichierbinairecréélors d'un import ) calibration.py __init__ de <mon_repertoire>/calibration
Script et langage Python Modules utiles de la Cheese Shop • sys (communication avec l’interpréteur python) • math (opérations mathématiques) • os (accès au système d’exploitation) • shutils (fonctions sur les fichiers) • getopt (gestion des options en ligne de commande) • re (expressions régulières) • logging (gestion de messages, débogage) • copy (copie de structure complexes) • random (nombres aléatoires) • glob (listage de noms de fichiers) • datetime (heure et date) • urllib2 (interaction avec le web) • tempfile (fichiers temporaires) • codecs ( gestion des encodages de texte) • numPy (tableaux) • sciPy (calculs) • mathplotlib (graphiques)
Script et langage Python Exo importer • http://lappwiki01.in2p3.fr/Support-Applicatif/index.php/Formation_Python/Exos#Exo_importer
Types de données standards Types de données standard • Basiques • Booléens (True ou False) • Numériques • Chaines de caractères • Autres • Séquences (tuple, listes, en plus des chaînes de caractères) • Dictionnaires • Ensembles (sets) • Fonctions et méthodes • Classes Pour connaître le type d'une variable v : type(v)
Types de données standards Types et opérations numériques • int (entier long par défaut) : 3,4… ( taille max définie par la variable [-sys.maxint -1, sys.maxint]) • long, entier long (précision illimitée) • float, flottant (basé sur double c++) : 3.13e10, 0.12 • complex, nombres complexes : 3.2+2.5j
Types de données standards Opérations numériques
Types de données standards Les modules math, numpy et matplotlib • math : • sqrt • Trigonométrie et inverse • Exponentielle et logarithme • Arrondis • Constantes e et π (pi) • >>import math • >>math.fonction(argument) • ou from math import fonction et fonction(argument) • numpy : applications scientifiques • Tableau : numpy.array() • Matrices : numpy.matrix() • Manipulations de ces objets : • Redimensionner • Concaténer • matplotlib • Visualisation 2D
Types de données standards Opération de comparaison et bit à bit
Types de données standards Exo comparaisons • http://lappwiki01.in2p3.fr/Support-Applicatif/index.php/Formation_Python/Exos#Exo_comparaison
Types de données standards : les séquences Séquences • 2 familles : • Non modifiables : • Chaines de caractères • N-uplets (tuples) • Modifiables : listes • Indexation • a=‘tapis’ • a[0]=t ⇒ séquences avec indice 1er 0 • a[-1]=s ⇒ -1 dernier élément de la série • a[2:4]=pi ⇒ tranche i, j commence au ième fini au kème-1 • Copie d’une chaine ou séquence avec [:] • Séquence en pas : a[début:fin:pas] on ne peut pas modifier le contenu d'une chaine ou d'un n-uplet en accédant à un élément par son indice
Types de données standards : les séquences Opérations sur les séquences Opérations sur les séquences modifiables et non modifiables
Types de données standards : les chaines de caractères Chaînes de caractères • Séquences non modifiables • Délimitation par des apostrophes, guillemets simples ou triples : • ‘formation ”python”’ • ”L’objectif” • ”””L’objectif de cette formation ”python” est…””” • Caractères spéciaux :\n, \t, \b • Triples guillemets permettent le retour à la ligne dans les chaines : documentation de code unicode : u'blabla' rawstring : r'blabla'
Types de données standards : les chaines de caractères Méthodes des chaines de caractères • On peut classer les méthodes en plusieurs catégories : • Gestion des espaces • Gestion des majuscules et minuscules • Test de la nature d’une chaine • Recherche et remplacement • Découpage et collage de chaînes • Formatage • Une nouvelle chaine est créée et renvoyée par les méthodes • L'appel à une méthode ne modifie pas la chaine en elle-même
Types de données standards : les chaines de caractères Gestion des espaces
Types de données standards : les chaines de caractères Gestion des majuscules et des minuscules
Types de données standards : les chaines de caractères Tests sur la nature de la chaîne
Types de données standards : les chaines de caractères Recherche et remplacement
Types de données standards : les chaines de caractères Découpage et collage
Types de données standards : les chainesde caractères Formatage des chaines • Il est possible de créer une chaine en formatant son contenu avec l’opérateur % • équivalent à printfde C • print "Les chaines à formater sont %s et %s" %(val1,val2) • Les chaines à formater sont introduites par le caractère % suivie du type de variable
Types de données standards : les chainesde caractères Formatage • Les nombres aussi se formatent, ce qui est utile pour le nombre de chiffres significatifs. Ceci est de la forme [flag][taille][.presision] ex : >>> print "val = %8.4f" %5.787767 val = 5.7878
Types de données standards : les chaines de caractères Exercices sur les chaines de caractères Voir page Twiki : http://lappwiki01.in2p3.fr/Support-Applicatif/index.php/Formation_Python/Exos#Exo_cha.C3.AEnes
Types de données standards : N-uplets et listes N-uplets (tuples), listes • Tuples sont des séquences non modifiables, entre parenthèses ou suite de valeurs séparées par des virgules : • (a, b, c) • 1,2 • (1,) : seul manière de définir un tuple à un seul élément • (1,["k7",1,-0.7],4.5,"z") • Listes sont des séquences modifiables, entre [] : • [a, (1,2), ”Python”] • [(3,), (5,),] : possibilité de mettre une virgule après dernier élément
Types de données standards : N-uplets et listes Opérations sur les listes
Types de données standards : N-uplets et listes Méthodes des listes
Types de données standards : N-uplets et listes Exercice sur les listes Opérateur de copie Si vouscopiezunelistedansuneautre avec l'opérateur '=', les deuxlistespointentsur la même zone mémoire http://lappwiki01.in2p3.fr/Support-Applicatif/index.php/Formation_Python/Exos#Exo_Listes Toute modification faitesurl'une des listesimpactel'autre Pour copier uneliste : lnew= linit[:]
Types de données standards : les dictionnaires Les dictionnaires • Fonctionnent par correspondance clef / valeur • Un dictionnaire est représenté avec des accolades, sous la forme suivante {1:’Formation’,2:’Python’,3:’Lapp’} (clefs :1,2,3 ; valeurs : ‘Formation', 'Python',’Lapp' ) • Les clefs peuvent être de type numérique, chaine de caractères ou N-uplets, mais pas de type dictionnaire ou liste • Les valeurs sont de type quelconque • On peut faire une liste de dictionnaires • L’ordre des éléments n’est pas conservé en manipulant les dictionnaires
Types de données standards : les dictionnaires Méthodes des dictionnaires
Types de données standards : les chaines de caractères Substitution de données • Les valeurs à formater peuvent être introduite dans la chaine avec la syntaxe %(nom) format • Le nom fait référence à la valeur d’un dictionnaire associé à la clef nom • Ceci est utile quand on a à changer plusieurs fois un nom par des valeurs différentes >>> a = "Le %(legume)s est un %(variete)s " >>> valeurs = {'legume':'poireau', 'variete':'allium'} >>> print a % valeurs Le poireau est un allium. >>> valeursII = {'legume':'concombre', 'variete':'cucurbitacee} >>> print a % valeursII Le concombre est un cucurbitacee.
Types de données standards : les dictionnaires Exo sur dictionnaires Opérateur de copie Si vous copiez un dictionnaire dans un autre avec l'opérateur '=', les deux dictionnaires pointent sur la même zone mémoire http://lappwiki01.in2p3.fr/Support-Applicatif/index.php/Formation_Python/Exos#Exo_Dictionnaire Toute modification faite sur l'un des dictionnaires impacte l'autre Pour copier une liste : dnew= {} dnew.update(dinit)
Types de données standard : les sets Ensemble (set) • Avant python 2.4 : • Un set est une collection non ordonnée d’objets sans doublon • Le module sets existe avec les deux classes suivantes : • set (modifiable) • et imutableSet (non modifiable) • Un ensemble peut être créé à partir d’une liste, d’un dictionnaire, d’une chaine ou un tuple. Si des doublons éventuels existent, ils seront alors absents de l’ensemble • Ex : >>> import sets >>> b=sets.Set(….) >>> a="seed" >>> b=set(a) >>> print b set(['s', 'e', 'd'])
Types de données standard : les sets Méthodes des ensembles
Structures de contrôle Structures de contrôle • Tests (if, elif et else) • Boucles (for, while) • Gestions d’exceptions (do, until) • Contrairement au C++, les variables créées dans les structures sont accessibles à l’extérieur de celles-ci • Par contre, les variables créées dans les fonctions, les méthodes et les classes ne sont accessibles qu’à l’intérieur de celles-ci
Structures de contrôle Tests : if, elif, else • Tester une valeur : • Les blocs sont exécutés en fonction de la valeur de a • if est la condition, elif une(des) alternative(s) et else si aucune condition précédente n’est respectée • pas d‘instruction de type switch if a==1 (test1): print "a est bien egal a 1" elif a==2 (test2): print "a est bien egal a 2" else: print "a est egal a ",a
Structures de contrôle Boucles • for : itération sur valeurs d’une séquence définie ou à définir • for i in range(j,k): (de j à k-1) • for valeurs in list: (boucle sur valeurs de la liste) • for keys in dict: (boucle sur clefs du dictionnaire) • while : itération tant que condition vérifiée • while test: • #corps de la boucle • break permet de sortir de la boucle • continue permet de passer à l’itération suivante • Pas de do ou until: >>range(4) [0, 1, 2, 3] >>range(3,7) [3, 4, 5, 6] >>range(7, 4, -1) [7, 6, 5] • whiletrue: • #corps de la boucle • If condition_sortie • break
Structures de contrôle Remarques sur boucle for • Boucle sur les élémentsd'uneliste: liste=[("janv",31),("fev",28),("mars",30),…] for mois,nJour in liste: … moisest le premier élément de chaque n-uplet nJourest le second élément de chaque n-uplet liste=["janv","fev","mars",…] for i,mois in enumerate(liste): … iestl'indice de l'élément moisest la valeur de l'élément
Structures de contrôle Compréhensions de liste • Syntaxe concise de construction et lisibilité • Nouvel objet peut être créé (conseillé) • Simplification des boucles for produisant liste • Exemples : Une liste Deux listes >>> liste1 = (1, 2, 3) >>> liste2 = (‘a’, ‘b’) >>> [(a,b) for a in liste1 for b in liste2] [(1, ‘a’), (1, ‘b’), (2, ‘a’), (2, ‘b’), (3, ‘a’), (3, ‘b’), ] >>> [(a,b) for a in liste1 for b in liste2 if a%2] [(1, ‘a’), (1, ‘b’), (3, ‘a’), (3, ‘b’), ] >>> liste = [1, 3, 5] >>> [3*x for x in liste] [3, 9, 15] >>> [3*x for x in liste if x >2] [6, 15] >>> [3*x for x in liste if x<1] []
Structures de contrôle Exo contrôle de structures http://lappwiki01.in2p3.fr/Support-Applicatif/index.php/Formation_Python/Exos#Exo_Structure