1 / 90

Formation Python

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)

xander
Download Presentation

Formation Python

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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)

  2. 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)

  3. 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

  4. 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, …)

  5. 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

  6. 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

  7. 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;} 

  8. 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é

  9. 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

  10. 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

  11. 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

  12. 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)

  13. 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())

  14. 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

  15. 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)

  16. Script et langage Python Exo importer • http://lappwiki01.in2p3.fr/Support-Applicatif/index.php/Formation_Python/Exos#Exo_importer

  17. 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)

  18. 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

  19. Types de données standards Opérations numériques

  20. 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

  21. Types de données standards Opération de comparaison et bit à bit

  22. Types de données standards Exo comparaisons • http://lappwiki01.in2p3.fr/Support-Applicatif/index.php/Formation_Python/Exos#Exo_comparaison

  23. 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

  24. Types de données standards : les séquences Opérations sur les séquences Opérations sur les séquences modifiables et non modifiables

  25. 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'

  26. 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

  27. Types de données standards : les chaines de caractères Gestion des espaces

  28. Types de données standards : les chaines de caractères Gestion des majuscules et des minuscules

  29. Types de données standards : les chaines de caractères Tests sur la nature de la chaîne

  30. Types de données standards : les chaines de caractères Recherche et remplacement

  31. Types de données standards : les chaines de caractères Découpage et collage

  32. 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

  33. 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

  34. 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

  35. 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

  36. Types de données standards : N-uplets et listes Opérations sur les listes

  37. Types de données standards : N-uplets et listes Méthodes des listes

  38. 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[:]

  39. 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

  40. Types de données standards : les dictionnaires Méthodes des dictionnaires

  41. 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.

  42. 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)

  43. 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'])

  44. Types de données standard : les sets Méthodes des ensembles

  45. 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

  46. 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

  47. 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

  48. 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

  49. 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] []

  50. Structures de contrôle Exo contrôle de structures http://lappwiki01.in2p3.fr/Support-Applicatif/index.php/Formation_Python/Exos#Exo_Structure

More Related