Cours Python 3

download Cours Python 3

of 159

description

Cours sur Python 3 en Français

Transcript of Cours Python 3

  • Bob Cordeau & Laurent Pointal

    Une introduction Python 3version 1.618c

  • iii

    Remerciements

    Grand merci Hlne Cordeau pour ses illustrations ; les aventures de Pythoon en-chantent les ttes de paragraphe.Merci Tarek Ziad pour les emprunts ses publications, en particulier nous remercions

    les ditions Eyrolles pour leur aimable autorisation de publier le dialogue de la page et les ditions Dunod pour leur aimable autorisation de publier les exemples des pages , et .Merci Ccile Trevian pour son aide la traduction du Zen de Python .Merci Stphane Gimenez pour sa relecture en profondeur et Xavier Olive pour les

    emprunts son papier Introduction lcriture chinoise .Merci ric Berthomier et Christophe Massuti pour leur construction du livre sous

    Debian et la remonte des correctifs ncessaires.Merci Jean-Pierre Guiet, typographe mrite, pour ses corrections pointues.Une pense spciale pour Stphane Barthod : son enseignement didactique auprs des

    tudiants et son engagement envers ses collgues ne seront pas oublis.Enn il faudrait saluer tous les auteurs butins sur Internet

  • En se partageant le savoir ne se divise pas,il se multiplie

  • Sommaire

    Introduction La calculatrice Python Contrle du ux dinstructions Conteneurs standard Fonctions et espaces de noms Modules et paages La Programmation Oriente Objet La POO graphique Teniques avances

    A Interlude B Passer du problme au programme C Jeux de caractres et encodage D Les expressions rgulires E Exercices corrigs

    Bibliographie et Webographie Memento Python Abrg dense Python Index Glossaire

    Table des matires

  • Avant-propos

    qui sadresse ce cours ?Utilis lorigine par les tudiants de Mesures Physiques de lIUT dOrsay, ce cours sadresse plus

    gnralement toute personne dsireuse dapprendre Python en tant que premier langage de program-mation.

    Ce cours se veut essentiellement pratique. Dune part en fournissant de trs nombreux exemples etune vingtaine dexercices corrigs, et dautre part en proposant plusieurs moyens de naviguer dans ledocument : un sommaire en dbut et une table des matires dtaille en n, un index et un glossaire, tousdeux munis dhyperliens.

    Cette introduction reposent sur quelques partis pris Le choix du langage Python version , version qui abolit la compatibilit descendante avec la srie

    des versions .x dans le but dliminer les faiblesses originelles du langage. Le choix de logiciels libres ou gratuits :

    des interprteurs ou diteurs spcialiss comme IPython, spyder ou Wingware ; des outils open source de production de documents : le moteur XTEX , le script latexmk , ldi-

    teur TeXworks et le logiciel de cration de diagrammes Dia. Enn sur labondance des ressources et de la documentation sur le Web !

    Numro de version ?Suivant lexemple de Donald Knuth, linventeur du logiciel de composition TEX, le numro de la ie ver-

    sion de ce document, au lieu dtre . ou .. , est la ie dcimale dun nombre clbre .

    Pour joindre les auteursk [email protected] [email protected]

    Sauf mention contraire, le contenu de cet ouvrage est publi sous la licence :Creative Commons BY-NC-SA-.

    La copie de cet ouvrage est autorise sous rserve du respect des conditions de la licencecreativecommons.org/licenses/by/3.0/fr/

    . Cest une grave dcision, mrement rchie : Un langage qui bouge peu permet une industrie qui bouge beaucoup (Bertrand Meyer).

    . Le moteur est le programme qui permet de composer ce texte. Il est associ au format XLATEX, ensemble de macrossimpliant lcriture.

    . Permet dautomatiser la composition.. ' 1

    p5

    2 , le nombre dor.

  • C

    Introduction

    Ce premier chapitre introduit les grandes caractristiques du langage Py-thon, le replace dans lhistoire des langages informatiques, donne les parti-cularits de production des programmes, dnit la notion si importante dal-gorithme et conclut sur les divers implmentations disponibles.

    . Principales caractristiques du langage Python Historique

    : Guido van Rossum travaille aux Pays-Bas sur le projet AMOEBA, un systme dexploita-tion distribu. Il conoit Python partir du langage ABC et publie la version .. sur un forumUsenet

    : sortie de Numerical Python, anctre de numpy : naissance de la PSF (Python Soware Fundation) Les versions se succdent Un grand choix de modules est disponible, des colloques annuels

    sont organiss, Python est enseign dans plusieurs universits et est utilis en entreprise : premire sortie de IPython Fin : sorties simultanes de Python . et de Python . : versions en cours des branches et : v.. et v..

    Langage Open Source Licence Open Source CNRI, compatible GPL, mais sans la restriction copyle. Donc Python est

    libre et gratuit mme pour les usages commerciaux GvR (Guido van Rossum) est le BDFL (dictateur bnvole vie !) Importante communaut de dveloppeurs Nombreux outils standard disponibles : Baeries included

    Travail interactif Nombreux interprteurs interactifs disponibles (notamment IPython) Importantes documentations en ligne Dveloppement rapide et incrmentiel Tests et dbogage outills Analyse interactive de donnes

    Langage interprt rapide Interprtation du bytecode compil De nombreux modules sont disponibles partir de bibliothques optimises (souvent crites en

    C ou C++) Simplicit du langage (cf. annexe A p. ) :

    Syntaxe claire et cohrente Indentation signicative

    . au CWI : Centrum voor Wiskunde en Informatica.

  • Introduction . Matriel et logiciel

    Gestion automatique de la mmoire (garbage collector) Typage dynamique fort : pas de dclaration

    Orientation objet Modle objet puissant mais pas obligatoire Structuration multichier aise des applications : facilite les modications et les extensions Les classes, les fonctions et les mthodes sont des objets dits de premire classe. Ces objets sont

    traits comme tous les autres (on peut les aecter, les passer en paramtre) Ouverture au monde

    Interfaable avec C/C++/FORTRAN Langage de script de plusieurs applications importantes Excellente portabilit

    Disponibilit de bibliothques Plusieurs milliers de packages sont disponibles dans tous les domaines

    Points forts de Python : langage de trs haut niveau ; sa lisibilit ; langage algorithmique excutable .

    . Environnements matriel et logiciel.. Lordinateur

    On peut schmatiser la dnition de lordinateur de la faon suivante :Dnitionb Ordinateur : automate dterministe composants lectroniques.

    Lordinateur comprend entre autres : un microprocesseur avec une UC (Unit de Contrle), une UAL (Unit Arithmtique et Logique),

    une horloge, une mmoire cache rapide ; de la mmoire volatile (dite vive ou RAM), contenant les instructions et les donnes ncessaires

    lexcution des programmes. La RAM est forme de cellules binaires (bits) organises en mots de bits (octets) ;

    des priphriques : entres/sorties, mmoires permanentes (dites mortes : disque dur, cl USB, CD-ROM), rseau

    .. Deux sortes de programmesOn distingue, pour faire rapide : Le systme dexploitation : ensemble des programmes qui grent les ressources matrielles et lo-

    gicielles. Il propose une aide au dialogue entre lutilisateur et lordinateur : linterface textuelle(interprteur de commande) ou graphique (gestionnaire de fentres). Il est souvent multitche etparfois multiutilisateur ;

    les programmes applicatifs sont ddis des tches particulires. Ils sont forms dune srie decommandes contenues dans un programme source qui est transform pour tre excut par lordi-nateur.

    . Langages.. Des langages de dirents niveaux

    Chaque processeur possde un langage propre, directement excutable : le langage machine. Il estform de et de et nest pas portable, cest le seul que lordinateur puisse utiliser ;

    le langage dassemblage est un codage alphanumrique du langage machine. Il est plus lisible quele langage machine, mais nest toujours pas portable. On le traduit en langage machine par unassembleur ;

    les langages de haut niveau. Souvent normaliss, ils permeent le portage dune machine lautre.Ils sont traduits en langage machine par un compilateur ou un interprteur .

    - -

  • . Production des programmes Introduction

    .. Trs bref historique des langages Annes (approches exprimentales) : FORTRAN, LISP, COBOL, ALGOL Annes (langages universels) : PL/, Simula, Smalltalk, Basic Annes (gnie logiciel) : C, PASCAL, ADA, MODULA- Annes (programmation objet) : C++, LabView, Eiel, Perl, VisualBasic Annes (langages interprts objet) : Java, tcl/Tk, Ruby, Python Annes (langages commerciaux propritaires) : C#, VB.NETDes centaines de langages ont t crs, mais lindustrie nen utilise quune minorit.

    . Production des programmes.. Deux teniques de production des programmes

    La compilation est la traduction du source en langage objet. Elle comprend au moins quatre phases(trois phases danalyse lexicale, syntaxique et smantique et une phase de production de code objet).Pour gnrer le langage machine il faut encore une phase particulire : ldition de liens. La compilationest contraignante mais ore au nal une grande vitesse dexcution.

    ..source. compilateur. objet. excuteur. rsultat

    F . Chane de compilation

    Dans la technique de linterprtation chaque ligne du source analys est traduite au fur et mesure eninstructions directement excutes. Aucun programme objet nest gnr. Cee technique est trs souplemais les codes gnrs sont peu performants : linterprteur doit tre utilis chaque nouvelle excution

    ..source. interprteur. rsultat

    F . Chane dinterprtation

    .. Tenique de production de Python Technique mixte : linterprtation du bytecode compil. Bon compromis entre la facilit de dve-

    loppement et la rapidit dexcution ; le bytecode (forme intermdiaire) est portable sur tout ordinateur muni de la machine virtuelle

    Python.

    ..source. compilateur. bytecode. interprteur. rsultat

    F . Interprtation du bytecode compil

    Pour excuter un programme, Python charge le chier source .py en mmoire vive, en fait lanalyse(lexicale, syntaxique et smantique), produit le bytecode et enn lexcute.

    An de ne pas refaire inutilement toute la phase danalyse et de production, Python sauvegarde lebytecode produit (dans un chier .pyo ou .pyc) et recharge simplement le chier bytecode sil est plusrcent que le chier source dont il est issu.

    En pratique, il nest pas ncessaire de compiler explicitement un module, Python gre ce mcanismede faon transparente.

    - -

  • Introduction . Algorithme et programme

    .. Construction des programmesLe gnie logiciel tudie les mthodes de construction des programmes. Plusieurs modles sont envisa-

    geables, entre autres : la mthodologie procdurale. On emploie lanalyse descendante (division des problmes) et remon-

    tante (rutilisation dun maximum de sous-algorithmes). On seorce ainsi de dcomposer un pro-blme complexe en sous-programmes plus simples. Ce modle structure dabord les actions ;

    la mthodologie objet. Centre sur les donnes, elle est considre plus stable dans le temps etmeilleure dans sa conception. On conoit des fabriques (classes) qui servent produire des compo-sants (objets) qui contiennent des donnes (aributs) et des actions (mthodes). Les classes drivent(hritage et polymorphisme) de classes de base dans une construction hirarchique.

    Python ore les deux techniques.

    . Algorithme et programme.. DnitionsDnitionb Algorithme : ensemble des tapes permeant daeindre un but en rptant un nombre ni de foisun nombre ni dinstructions.

    Donc un algorithme se termine en un temps ni.

    Dnitionb Programme : un programme est la traduction dun algorithme en un langage compilable ou interpr-table par un ordinateur.

    Il est souvent crit en plusieurs parties dont une qui pilote les autres : le programme principal.

    .. Prsentation des programmesUn programme source est destin ltre humain. Pour en faciliter la lecture, il doit tre judicieusement

    prsent et comment.La signication de parties non triviales (et uniquement celles-ci) doit tre explique par un commen-

    taire. En Python, un commentaire commence par le caractre # et stend jusqu la n de la ligne :#~~~~~~~~~~~~~~~~~~~~~# Voici un commentaire#~~~~~~~~~~~~~~~~~~~~~

    9 + 2 # en voici un autre

    . Implmentations de PythonRemarque3 Une implmentation signie une mise en uvre .

    CPython : Classic Python, cod en C, implmentation portable sur dirents systmes Jython : cibl pour la JVM (utilise le bytecode de JAVA) IronPython : Python.NET, crit en C#, utilise le MSIL (MicroSo Intermediate Language) Staless Python : limine lutilisation de la pile du langage C (permet de rcurser tant que lon

    veut) Pypy : projet de recherche europen dun interprteur Python crit en Python

    - -

  • C La calculatrice Python

    Comme tout langage, Python permet de manipuler des donnes grce unvocabulaire de mots rservs et grce des types de donnes approximationdes ensembles de dnition utiliss en mathmatique.Ce chapitre prsente les rgles de construction des identicateurs, les types

    de donnes simples (les conteneurs seront examins au chapitre ) ainsi queles types chane de caractres.Enn, last but not least, ce chapitre stend sur les notions non triviales de

    variable, de rfrence dobjet et daectation.

    . Les modes dexcution.. Les deux modes dexcution dun code Python

    Soit on enregistre un ensemble dinstructions Python dans un chier grce un diteur (on parlealors dun script Python) que lon excute par une commande ou par une touche du menu de ldi-teur ;

    soit on utilise linterprteur Python embarqu qui excute la boucle dvaluation (+ Fig. .).

    .. 5 + 3 Achage dune invite. Lutilisateur tape une expression.

    8 valuation et achage du rsultat. Rachage de linvite.

    F . La boucle dvaluation de linterprteur Python

    . Identicateurs et mots cls.. Identicateurs

    Comme tout langage, Python utilise des identicateurs pour nommer ses objets.Dnitionb Un identicateur Python est une suite non vide de caractres, de longueur quelconque, forme duncaractre de dbut et de zro ou plusieurs caractres de continuation.

    Sachant que : le caractre de dbut peut tre nimporte quelle lere Unicode (cf. annexe C p. ), y compris le

    caractre soulign (_) ; un caractre de continuation est un caractre de dbut ou un chire.

  • La calculatrice Python . Notion dexpression

    Attentionj Les identicateurs sont sensibles la casse et ne doivent pas tre un mot rserv de Python (voirle Les mots rservs de Python ci-dessous ).

    .. Style de nommageIl est important dutiliser une politique cohrente de nommage des identicateurs. Voici le style utilis

    dans ce document : nom_de_ma_variable pour les variables ; NOM_DE_MA_CONSTANTE pour les constantes ; maFonction, maMethode pour les fonctions et les mthodes ; MaClasse pour les classes ; UneExceptionError pour les exceptions ; nom_de_module pour les modules et pour tous les autres identicateurs.Exemples :

    NB_ITEMS = 12 # UPPER_CASEclass MaClasse : pass # TitleCasedef maFonction() : pass # camelCasemon_id = 5 # lower_case

    Pour ne pas prter confusion, viter dutiliser les caractres l (minuscule), O et I (majuscules) seuls.Enn, on vitera dutiliser les notations suivantes :

    _xxx # usage interne__xxx # attribut de classe__xxx__ # nom spcial rserv

    .. Les mots rservs de Python La version . de Python compte mots cls :and del from None Trueas elif global nonlocal tryassert else if not whilebreak except import or withclass False in pass yieldcontinue finally is raisedef for lambda return

    . Notion dexpressionDnitionb Une expression est une portion de code que linterprteur Python peut valuer pour obtenir unevaleur.

    Les expressions peuvent tre simples ou complexes. Elles sont formes dune combinaison de lirauxreprsentant directement des valeurs, didenticateurs et doprateurs.

    >>> id1 = 15.3>>> id2 = id1 - 13>>> if id2 > 0:... id3 = 7... else:... id3 = -4

    . Les types de donnes entiersDnitionb Le type dun objet Python dtermine de quelle sorte dobjet il sagit.

    Python ore deux types entiers standard : int et bool.. Voir les dtails dans la PEP : Style Guide for Python , Guido van Rossum et Barry Warsaw

    - -

  • . Les types de donnes entiers La calculatrice Python

    .. Le type intLe type int nest limit en taille que par la mmoire de la machine .Les entiers liraux sont dcimaux par dfaut, mais on peut aussi utiliser les bases suivantes :

    >>> 2013 # dcimal (base 10)2013>>> 0b11111011101 # binaire (base 2)2013>>> 0o3735 # octal (base 8)2013>>> 0x7dd # hexadecimal (base 16)2013

    Oprations arithmtiques

    Les principales oprations :

    >>> 20 + 323>>> 20 - 317>>> 20 * 360>>> 20 ** 38000>>> 20 / 36.666666666666667>>> 20 // 3 # division entire6>>> 20 % 3 # modulo (reste de la division entire)2>>> abs(3 - 20) # valeur absolue17

    Bien remarquer le rle des deux oprateurs de division :/ : produit une division oante, mme entre deux entiers ;// : produit une division entire.

    Bases usuelles

    Un entier crit en base (par exemple 179) peut tre reprsent en binaire, octal et hexadcimal enutilisant les syntaxes suivantes :

    >>> 0b10110011 # binaire179>>> bin(179)0b10110011>>> 0o263 # octal179>>> oct(179)0o263>>> 0xB3 # hexadcimal179>>> hex(179)0xb3

    . Dans la plupart des autres langages les entiers sont cods sur un nombre xe de bits et ont un domaine de dnition limitauquel il convient de faire aention.

    - -

  • La calculatrice Python . Les types de donnes entiers

    Les bases arithmtiquesDnitionb En arithmtique, une base n dsigne la valeur dont les puissances successives inter-viennent dans lcriture des nombres, ces puissances dnissant lordre de grandeur de cha-cune des positions occupes par les chires composant tout nombre.Par exemple : 57n (5n1) (7n0)

    Certaines bases sont couramment employes : la base (systme binaire), en lectronique numrique et informatique ; la base (systme octal), en informatique ; la base (systme hexadcimal), frquente en informatique ; la base (systme sexagsimal), dans la mesure du temps et des angles.

    Les angements de baseUn nombre dans une base n donne scrit sous la forme daddition des puissances succes-sives de cee base.Exemples

    5716 (5161) (7160) 8710578 (581) (780) 4710

    .. Le type bool

    Principales caractristiques du type bool : Deux valeurs possibles : False, True. Oprateurs de comparaison entre deux valeurs comparables, produisant un rsultat de type bool :

    ==,!=, >, >=, < et >> 2 > 8False>>> 2 >> (3 == 3) or (9 > 24)True>>> (9 > 24) and (3 == 3)False

    . Nomm daprs George Boole, logicien et mathmaticien britannique du esicle.

    - -

  • . Les types de donnes ottants La calculatrice Python

    Les oprateurs boolens de baseEn Python les valeurs des variables boolennes sont notes False et True. Lesoprateurs sont nots respectivement not, and et or.

    Oprateur unaire nota not(a)

    False TrueTrue False

    Oprateurs binaires or et and

    a b a or b a and b

    False False False FalseFalse True True FalseTrue False True FalseTrue True True True

    Attentionj Pour tre sr davoir un rsultat boolen avec une expression reposant sur des valeurs transtypes,appliquez bool() sur lexpression.

    . Les types de donnes ottantsRemarque3 La notion mathmatique de rel est une notion idale. Ce graal est impossible aeindre en infor-matique. On utilise une reprsentation interne (normalise) permeant de dplacer la virgule grce unevaleur dexposant variable. On nommera ces nombres des oants.

    .. Le type float Un float est not avec un point dcimal (jamais avec une virgule) ou en notation exponentielle

    avec un e symbolisant le puissance suivi des chires de lexposant. Par exemple :2.718.02-1.6e-196.023e23

    Les oants supportent les mmes oprations que les entiers. Ils ont une prcision nie limite. Limport du module math autorise toutes les oprations mathmatiques usuelles. Par exemple :

    >>> import math>>> print(math.sin(math.pi/4))0.7071067811865475>>>> print(math.degrees(math.pi))180.0>>>> print(math.factorial(9))362880>>> print(math.log(1024, 2))10.0

    .. Le type complex Les complexes sont crits en notation cartsienne forme de deux oants. La partie imaginaire est suxe par j :

    >>> print(1j)1j>>> print((2+3j) + (4-7j))(6-4j)>>> print((9+5j).real)9.0>>> print((9+5j).imag)5.0

    - -

  • La calculatrice Python . Variables et aectation

    >>> print((abs(3+4j))) # module5.0

    Un module mathmatique spcique (cmath) leur est rserv :

    >>> import cmath>>> print(cmath.phase(-1 + 0j))3.141592653589793>>> print(cmath.polar(3 + 4j))(5.0, 0.9272952180016122)>>> print(cmath.rect(1., cmath.pi/4))(0.7071067811865476+0.7071067811865475j)

    . Variables et aectation.. Les variables

    Ds que lon possde des types de donnes, on a besoin des variables pour stocker les donnes.En ralit, Python nore pas directement la notion de variable, mais plutt celle de rfrence dobjet.

    Tant que lobjet nest pas modiable (comme les entiers, les oants, les chanes, etc.), il ny a pas de di-rence notable entre les deux notions. On verra que la situation change dans le cas des objets modiablesDnitionb Une variable est un identicateur associ une valeur. En Python, cest une rfrence dobjet.

    .. LaectationDnitionb On aecte une variable par une valeur en utilisant le signe = (qui na rien voir avec lgalit enmath !). Dans une aectation, le membre de gauche reoit le membre de droite ce qui ncessite dvaluerla valeur correspondant au membre de droite avant de laecter au membre de gauche.

    import math

    a = 2b = 7.2 * math.log(math.e / 45.12) - 2*math.pic = b ** a

    Remarque3 Pour ne pas confondre aectation et galit, loral, au lieu de dire a gal , dites a reoit .

    La valeur dune variable, comme son nom lindique, peut voluer au cours du temps. La valeur ant-rieure est perdue :

    >>> a = 3 * 7>>> a21>>> b = 2 * 2>>> b4>>> a = b + 5>>> a9

    Lemembre de droite dune aectation tant valu avant de raliser laectation elle-mme, la variableaecte peut se trouver en partie droite et cest sa valeur avant laectation qui est utilise dans le calcul :

    Le membre de droite dune aectation tant valu avant de raliser laectation elle-mme, la variableaecte peut se trouver en partie droite et cest cee valeur, avant aectation, qui est utilise pour le calcul :

    >>> a = 2>>> a = a + 1 # incrmentation>>> a3>>> a = a - 1 # dcrmentation

    - -

  • . Les anes de caractres La calculatrice Python

    >>> a2

    .. Aecter nest pas comparer !Laectation a un eet (elle modie ltat interne du programme en cours dexcution) mais na pas de

    valeur (on ne peut pas lutiliser dans une expression) :

    >>> c = True>>> s = (c = True) and TrueFile , line 1

    s = (c = True) and True^

    SyntaxError: invalid syntax

    La comparaison a une valeur (de type bool) utilisable dans une expression mais na pas deet :

    >>> c = a>>> s = (c == a) and True>>> sTrue

    .. Les variantes de laectationOutre laectation simple, on peut aussi utiliser les formes suivantes :

    >>> v = 4 # affectation simple>>> v += 2 # affectation augmente. Idem v = v + 2 si v est dj rfrenc>>> v6>>> c = d = 8 # d reoit 8 puis c reoit d (c et d sont des alias)>>> c, d(8, 8)>>> e, f = 2.7, 5.1 # affectation parallle dun tuple>>> (e, f)(2.7, 5.1)>>> g, h = [G, H] # affectation parallle dune liste>>> [g, h][G, H]>>> a = 3>>> a, b = a + 2, a * 2 # toutes les expressions sont values avant la premire affectation>>> a, b(5, 6)

    .. Reprsentation graphiques des aectationsDans les schmas de la gure ., les cercles reprsentent les identicateurs alors que les rectangles

    reprsentent les donnes.Les aectations relient les identicateurs aux donnes : si une donne en mmoire nest plus relie, le

    ramasse-miees (garbage collector) de Python la supprime automatiquement (car son nombre de rfrencestombe zro) :

    . Les anes de caractres.. PrsentationDnitionb Les chanes de caractres : le type de donnes non modiable str reprsente une squence de carac-tres Unicode.

    Non modiable signie quune donne, une fois cre en mmoire, ne pourra plus tre change ; toutetransformation rsultera en la cration dune nouvelle valeur distincte.

    - -

  • La calculatrice Python . Les anes de caractres

    ..

    x = a

    .

    x

    .

    a

    .

    y = b

    .

    y

    .

    b

    .z = c. z. c(a) Trois aectations

    ..

    x

    .

    a

    .

    y

    .

    b

    .z = y. z. c(b) La donne c est supprimelorsque z rfrence y

    ..

    d

    .

    x = d

    .

    x

    .

    a

    .

    y

    .

    b

    . z(c) La donne a est supprime lorsquex rfrence la nouvelle donne d

    F . Laectation illustre.

    Trois syntaxes de chane sont disponibles. Remarquez que lon peut aussi utiliser le la place de , cequi permet dinclure une notation dans lautre :

    >>> syntaxe1 = Premire forme avec un retour la ligne \n>>> print(syntaxe1)Premire forme avec un retour la ligne

    >>> syntaxe2 = rDeuxime forme. Chane brute\n sans retour la ligne>>> print(syntaxe2)Deuxime forme. Chane brute\n sans retour la ligne>>> syntaxe3 = Troisime formemulti-lignes

    trs utile pourla documentation

    >>> print(syntaxe3)

    Troisime formemulti-lignes

    trs utile pourla documentation

    >>> guillemets = Leau vive>>> guillemetsLeau vive>>> apostrophes = Il a dit gre!>>> apostrophesIl a dit gre!

    .. Oprations Longueur :

    >>> s = abcde>>> len(s)5

    Concatnation :

    - -

  • . Les anes de caractres La calculatrice Python

    >>> s1 = abc>>> s2 = defg>>> s3 = s1 + s2>>> s3abcdefg

    Rptition :

    >>> s4 = Fi! >>> s5 = s4 * 3>>> s5Fi! Fi! Fi!

    .. Fonctions vs mthodesOn peut agir sur une chane en utilisant des fonction (notion procdurale) communes tous les types

    squences ou conteneurs, ou bien des mthodes (notion objet) spciques aux chanes. Exemple dutilisation de la fonction len() :

    >>> lng = len(abc)>>> lng3

    Exemple dutilisation de la mthode upper(). Remarquez la dirence de syntaxe : les mthodesutilisent la notation pointe :

    >>> abracadabra.upper()ABRACADABRA

    .. Mthodes de test de ltat dune aneLes mthodes suivantes sont valeur boolenne, cest--dire quelles retournent la valeur True ou

    False.Remarque3 La notation entre crochets [xxx] indique un lment optionnel que lon peut donc omere lors delutilisation de la mthode.

    La chane s = cHAise basSe nous servira de test pour toutes les mthodes de cee section.

    isupper() et islower() : retournent True si la chane ne contient respectivement que des majuscu-les/minuscules :

    >>> s.isupper()False

    istitle() : retourne True si seule la premire lere de chaque mot de la chane est en majuscule :

    >>> s.istitle()False

    isalnum(), isalpha(), isdigit() et isspace() : retournent True si la chane ne contient respective-ment que des caractres alphanumriques, alphabtiques, numriques ou des espaces :

    >>> s.isalpha()True>>> s.isdigit()False

    startswith(prefix[, start[, stop]]) et endswith(suffix[, start[, stop]]) : testent si la sous-chane dnie par start et stop commence respectivement par prefix ou nit par suffix :

    - -

  • La calculatrice Python . Les anes de caractres

    >>> s.startswith(cH)True>>> s.endswith(aSSe)False

    .. Mthodes retournant une nouvelle ane lower(), upper(), capitalize() et swapcase() : retournent respectivement une chane enminuscule,

    en majuscule, en minuscule commenant par une majuscule, ou en casse inverse :

    >>> s.lower()chaise basse>>> s.upper()CHAISE BASSE>>> s.capitalize()Chaise basse>>> s.swapcase()ChaISE BASsE

    expandtabs([tabsize]) : remplace les tabulations par tabsize espaces ( par dfaut). center(width[, fillchar]), ljust(width[, fillchar]) et

    rjust(width[, fillchar]) : retournent respectivement une chane centre, justie gauche ou droite, complte par le caractre fillchar (ou par lespace par dfaut) :

    >>> s.center(20, -)----cHAise basSe---->>> s.rjust(20, @)@@@@@@@@cHAise basSe

    zfill(width) : complte ch gauche avec des 0 jusqu une longueur maximale de width :

    >>> s.zfill(20)00000000cHAise basSe

    strip([chars]), lstrip([chars]) et rstrip([chars]) : suppriment toutes les combinaisons de chars(ou lespace par dfaut) respectivement au dbut et en n, au dbut, ou en n dune chane :

    >>> s.strip(ce)HAise basS

    find(sub[, start[, stop]]) : renvoie lindex de la chane sub dans la sous-chane start stop,sinon renvoie -. rfind() eectue le mme travail en commenant par la n. index() et rindex()font de mme mais produisent une erreur (exception) si la chane nest pas trouve :

    >>> s.find(se b)4

    replace(old, new[, count]) : remplace count instances (toutes par dfaut) de old par new :

    >>> s.replace(HA, ha)chaise basSe

    split(seps[, maxsplit]) : dcoupe la chane en maxsplit morceaux (tous par dfaut). rsplit()eectue la mme chose en commenant par la n et striplines() eectue ce travail avec les ca-ractres de n de ligne :

    >>> s.split()[cHAise, basSe]

    join(seq) : concatne les chanes du conteneur seq en intercalant entre chaque lment la chanesur laquelle la mthode est applique :

    - -

  • . Les anes de caractres La calculatrice Python

    >>> **.join([cHAise, basSe])cHAise**basSe

    .. Indexation simplePour indexer une chane, on utilise loprateur [] dans lequel lindex, un entier sign qui commence

    0 indique la position dun caractre :

    >>> s = Rayon X # len(s) ==> 7>>> s[0]R>>> s[2]y>>> s[-1]X>>> s[-3]n

    ..

    s = Rayons X

    .

    s[0]

    .

    s[1]

    .

    s[2]

    .

    s[3]

    .

    s[4]

    .

    s[5]

    .

    s[6]

    .

    s[7]

    .R. a. y. o. n. s.. X.

    s[-8]

    .

    s[-7]

    .

    s[-6]

    .

    s[-5]

    .

    s[-4]

    .

    s[-3]

    .

    s[-2]

    .

    s[-1]

    F . Lindexation dune chane

    .. Extraction de sous-anesDnitionb Extraction de sous-chanes. Loprateur [] avec ou index spars par le caractre : permetdextraire des sous-chanes (ou tranches) dune chane.

    ..

    s = Rayons X

    .

    s[1:4]

    .

    s[-3:]

    .R. a. y. o. n. s.. X.

    s[:3]

    .

    s[3:]

    F . Extraction de sous-chanesPar exemple :

    >>> s = Rayon X # len(s) ==> 7>>> s[1:4] # de lindex 1 compris 4 non comprisayo>>> s[-2:] # de lindex -2 compris la fin X>>> s[:3] # du dbut lindex 3 non comprisRay>>> s[3:] # de lindex 3 compris la finon X>>> s[::2] # du dbut la fin, de 2 en 2RynX>>> s[::-1] # de la fin au dbut (retournement)X noyaR

    - -

  • La calculatrice Python . Les donnes binaires

    . Les donnes binairesLes types binaires

    Python propose deux types de donnes binaires : bytes (non modiable) et bytearray (modiable).

    >>> mot = Animal>>> type(mot)

    >>>>>> b_mot = bAnimal>>> type(b_mot)

    >>>>>> bmot = bytearray(b_mot)>>> type(bmot)

    Une donne binaire contient une suite de zro ou plusieurs octets, cest--dire dentiers non signs sur bits (compris dans lintervalle []). Ces types la C sont bien adapts pour stocker de grandesquantits de donnes. De plus Python fournit des moyens de manipulation ecaces de ces types.

    Les deux types sont assez semblables au type str et possdent la plupart de ses mthodes. Le typemodiable bytearray possde des mthodes communes au type list.

    . Les entres-sortiesLutilisateur a besoin dinteragir avec le programme (+ Fig. .). En mode console (on abordera les

    interfaces graphiques ultrieurement), on doit pouvoir saisir ou entrer des informations, ce qui est gnra-lement fait depuis une lecture au clavier. Inversement, on doit pouvoir acher ou sortir des informations,ce qui correspond gnralement une criture sur lcran.

    (a) Entre (b) Sortie

    F . Les entres-sorties.

    .. Les entresIl sagit de raliser une saisie au clavier : la fonction standard input() interrompt le programme, ache

    une ventuelle invite lcran et aend que lutilisateur entre une donne au clavier (ache lcran)et la valide par

    Entre .La fonction input() eectue toujours une saisie enmode texte (la valeur retourne est une chane) donton peut ensuite changer le type (on dit aussi transtyper ou cast en anglais) :

    >>> f1 = input(Entrez un flottant : )Entrez un flottant : 12.345>>> type(f1)

    >>> f2 = float(input(Entrez un autre flottant : ))Entrez un autre flottant : 12.345>>> type(f2)

    On rappelle que Python est un langage dynamique (les variables peuvent changer le type au gr desaectations) mais galement fortement typ (contrle de la cohrence des types) :

    - -

  • . Les entres-sorties La calculatrice Python

    >>> i = input(Entrez un entier : )Entrez un entier : 3>>> i3>>> iplus = int(input(Entrez un entier : )) + 1Entrez un entier : 3>>> iplus4>>> ibug = input(Entrez un entier : ) + 1Entrez un entier : 3Traceback (most recent call last):

    File , line 1, in TypeError: Cant convert int object to str implicitly

    .. Les sortiesEn mode calculatrice , Python lit-value-ache (+ Fig. ., p. ), mais la fonction print() reste

    indispensable aux achages dans les scripts. Elle se charge dacher la reprsentation textuelle des in-formations qui lui sont donnes en paramtre, en plaant un blanc sparateur entre deux informations, eten faisant un retour la ligne la n de lachage (le sparateur et la n de ligne peuvent tre modis) :

    >>> a, b = 2, 5>>> print(a, b)2 5>>> print(Somme :, a + b)Somme : 7>>>> print(a - b, est la diffrence)-3 est la diffrence>>> print(Le produit de, a, par, b, vaut :, a * b)Le produit de 2 par 5 vaut : 10>>> print(On a cas!, sep=~~~)On a cas!>>> # pour afficher autre chose quun espace en fin de ligne :>>> print(a, end=@)2@>>> print()

    >>>

    .. Les squences dappement lintrieur dune chane, le caractre antislash (\) permet de donner une signication spciale

    certaines squences de caractres :Squence Signication\saut_ligne saut de ligne ignor (en n de ligne)\\ ache un antislash\ apostrophe\ guillemet\a sonnerie (bip)\b retour arrire\f saut de page\n saut de ligne\r retour en dbut de ligne\t tabulation horizontale\v tabulation verticale\N{nom} caractre sous forme de code Unicode nomm\uhhhh caractre sous forme de code Unicode bits\Uhhhhhhhh caractre sous forme de code Unicode bits\ooo caractre sous forme de code octal\xhh caractre sous forme de code hexadcimal

    - -

  • La calculatrice Python . Les entres-sorties

    >>> print(\N{pound sign} \u00A3 \U000000A3) >>> print(d \144 \x64)d d d>>> print(rd \144 \x64) # la notation r... dsactive la signification spciale du caractre \d \144 \x64

    - -

  • C

    Contrle du flux dinstructions

    Un script Python est form dune suite dinstructions excutes en s-quence a de haut en bas.Chaque ligne dinstructions est forme dune ou plusieurs lignes physiquesqui peuvent tre continues par un antislash \ ou un caractre ouvrant [({pas encore ferm.Cee excution en squence peut tre modie pour choisir ou rpter desportions de code en utilisant des instructions composes .

    a. On peut mere plusieurs instructions sur la mme ligne en les sparant avec un; mais, par soucis de lisibilit, cest dconseill.

    . Instructions composesPour identier les instructions composes, Python utilise la notion dindentation signicative. Cee

    syntaxe, lgre et visuelle, met en lumire un bloc dinstructions et permet damliorer grandement laprsentation et donc la lisibilit des programmes sources.Syntaxe. Une instruction compose se compose : dune ligne den-tte termine par deux-points ;

    dun bloc dinstructions indent par rapport la ligne den-tte. On utilise habituellement quatreespaces par indentation et on ne mlange pas les tabulations et les espaces.

    Attentionj Toutes les instructions au mme niveau dindentation appartiennent au mme bloc.

    Exemple :#Exemplesdinstructioncomposesimple#(lesespacessontindiqusparuncaractrespcifique) :

    ph=6.0

    ifph7.0:print(Cestunebase.)

  • Contrle du ux dinstructions . Choisir

    #Exempledinstructioncomposeimbrique :n=3

    ifn2:print(nestsuprieur2)

    . Choisir.. Choisir : if - [elif] - [else]

    Contrler une alternative :

    >>> x = 5>>> if x < 0:... print(x est ngatif)... elif x % 2!= 0:... print(x est positif et impair)... print (ce qui est bien aussi!)... else:... print(x nest pas ngatif et est pair)...x est positif et impairce qui est bien aussi!

    Test dune valeur boolenne :

    >>> x = 8>>> estPair = (x % 2 == 0)>>> estPairTrue>>> if estPair: # mieux que if estPair == True:... print(La condition est vraie)...La condition est vraie

    .. Syntaxe compacte dune alternativePour trouver, par exemple, le minimum de deux nombres, on peut utiliser loprateur ternaire :

    >>> x = 4>>> y = 3>>> if x < y: # criture classique... plus_petit = x... else:... plus_petit = y...>>> print(Plus petit : , plus_petit)Plus petit : 3>>> plus_petit = x if x < y else y # utilisation de loprateur ternaire>>> print(Plus petit : , plus_petit)Plus petit : 3

    Remarque3 Loprateur ternaire est une expression qui fournit une valeur que lon peut utiliser dans une aectationou un calcul.

    - -

  • . Boucles Contrle du ux dinstructions

    . Boucles

    Notions de conteneur et ditrableDe faon gnrale, nous parlerons de conteneur pour dsigner un type

    de donnes permeant de stocker un ensemble dautres donnes, enayant ou non, suivant les types, une notion dordre entre ces donnes.Nous parlerons aussi ditrable pour dsigner un conteneur que lon

    peut parcourir lment par lment.Pour parcourir ces conteneurs, nous nous servirons parfois de lins-

    truction range() qui fournit un moyen commode pour gnrer une listede valeurs.Par exemple :

    >>> uneListe = list(range(6))>>> uneListe[0, 1, 2, 3, 4, 5]

    Ces notions seront tudies plus en dtail au chapitre , p. .

    Python propose deux sortes de boucles.

    .. Rpter : whileRpter une portion de code tant quune expression boolenne est vraie :>>> x, cpt = 257, 0>>> sauve = x>>> while x > 1:... x = x // 2 # division avec troncature... cpt = cpt + 1 # incrmentation...>>> print(Approximation de log2 de, sauve, :, cpt)Approximation de log2 de 257 : 8

    Utilisation classique : la saisie ltre dune valeur numrique (on doit prciser le type car on se rappelleque input() saisit une chane) :n = int(input(Entrez un entier [1 .. 10] : ))while not(1 > for lettre in ciao:... print(lettre)...ciao>>> for x in [2, a, 3.14]:... print(x)...2a3.14>>> for i in range(5):... print(i)...01

    - -

  • Contrle du ux dinstructions . Ruptures de squences

    234>>> nb_voyelles = 0>>> for lettre in Python est un langage tres sympa:... if lettre in aeiouy:... nb_voyelles = nb_voyelles + 1...>>> nb_voyelles10

    . Ruptures de squences.. interrompre une boucle : break

    Sort immdiatement de la boucle for ou while en cours contenant linstruction :

    >>> for x in range(1, 11):... if x == 5:... break... print(x, end= )...1 2 3 4>>> print(Boucle interrompue pour x =, x)Boucle interrompue pour x = 5

    .. Court-circuiter une boucle : continuePasse immdiatement litration suivante de la boucle for ou while en cours contenant linstruction ;

    reprend la ligne de len-tte de la boucle :

    >>> for x in range(1, 11):... if x == 5:... continue... print(x, end= )...1 2 3 4 6 7 8 9 10>>> # la boucle a saut la valeur 5

    .. Utilisation avance des bouclesLa syntaxe complte des boucles autorise des utilisations plus rares.

    while - else

    Les boucles while et for peuvent possder une clause else qui ne sexcute que si la boucle se terminenormalement, cest--dire sans interruption :

    y = int(input(Entrez un entier positif : ))while not(y > 0) :

    y = int(input(Entrez un entier positif, S.V.P. : ))

    x = y // 2while x > 1:

    if y % x == 0:print(x, a pour facteur, y)break # voici linterruption !

    x -= 1else :

    print(y, est premier.)

    - -

  • . Ruptures de squences Contrle du ux dinstructions

    for - else

    Un exemple avec le parcours dune liste :

    >>> entiers = [2, 11, 8, 7, 5]>>> cible = int(input(Entrez un entier : ))Entrez un entier : 7>>> for entier in entiers:... if cible == entier:... print(cible, est dans la squence, entiers)... break # voici linterruption!... else:... print(cible, nest pas dans la squence, entiers)...7 est dans la squence [2, 11, 8, 7, 5]>>> cible = int(input(Entrez un entier : ))Entrez un entier : 6>>>>>> for entier in entiers:... if cible == entier:... print(cible, est dans la squence, entiers)... break # voici linterruption!... else:... print(cible, est absent de la squence, entiers)...6 est absent de la squence [2, 11, 8, 7, 5]

    .. Traitement des erreurs : les exceptionsAn de rendre les applications plus robustes, il est ncessaire de grer les erreurs dexcution des

    parties sensibles du code.Lorsquune erreur se produit, elle traverse toutes les couches de code comme une bulle dair remonte

    la surface de leau. Si elle aeint la surface sans tre intercepte par le mcanisme des exceptions, le pro-gramme sarrte et lerreur est ache. Le traceback (message complet derreur ach) prcise lensembledes couches traverses.Dnitionb Grer une exception permet dintercepter une erreur pour viter un arrt du programme.

    Une exceptions spare dun ct la squence dinstructions excuter lorsque tout se passe bien et,dun autre ct, une ou plusieurs squences dinstructions excuter en cas derreur.

    Lorsquune erreur survient, un objet exception est pass au mcanisme de propagation des exceptions,et lexcution est transfre la squence de traitement ad hoc.

    Le mcanisme seectue donc en deux phases : la leve dexception lors de la dtection derreur ; le traitement appropri.

    Syntaxe. La squence normale dinstructions est place dans un bloc try.Si une erreur est dtecte (leve dexception), elle est traite dans le bloc except appropri (le gestionnairedexception).

    from math import sin

    for x in range(-4, 5) : # -4, -3, -2, -1, 0, 1, 2, 3, 4try :

    print({ :.3f}.format(sin(x)/x), end= )except ZeroDivisionError : # toujours fournir un type dexception

    print(1.0, end= ) # gre lexception en 0# -0.189 0.047 0.455 0.841 1.0 0.841 0.455 0.047 -0.189

    Toutes les exceptions leves par Python appartiennent un ensemble dexceptions nomm Exception.Cee famille ore une vingtaine dexceptions standard . Normalement, toutes les exceptions doivent donctre types (munies dun nom de type dexception) pour viter des erreurs silencieuses.

    . Citons quelques exemplaires : AritmeticError, ZeroDivisionError, IndexError, KeyError, AttributeError, IOError,ImportError, NameError, SyntaxError, TypeError

    - -

  • Contrle du ux dinstructions . Ruptures de squences

    Syntaxe complte dune exception :

    try:... # squence normale dexcution

    except as e1:... # traitement de lexception 1

    except as e2:... # traitement de lexception 2

    ...else:

    ... # clause excute en labsence derreurfinally:

    ... # clause toujours excute

    Linstruction raise permet de lever volontairement une exception. On peut trouver linstruction toutendroit du code, pas seulement dans un bloc try :x = 2if not(0

  • C

    Conteneurs standard

    Le chapitre a prsent les types de donnes simples, mais Python orebeaucoup plus : les conteneurs.De faon gnrale, un conteneur est un objet composite destin contenir

    dautres objets. Ce chapitre dtaille les squences, les tableaux associatifs, lesensembles et les chiers textuels.

    . SquencesDnitionb Une squence est un conteneur ordonn dlments indexs par des entiers indiquant leur positiondans le conteneur.

    Python dispose de trois types prdnis de squences : les chanes (vues prcdemment) ; les listes ; les tuples .

    . Listes.. Dnition, syntaxe et exemplesDnitionb Une liste est une collection ordonne et modiable dlments ventuellement htrognes.

    Syntaxe. lments spars par des virgules, et entours de crochets.

    . tuple nest pas vraiment un anglicisme, mais plutt un nologisme informatique.

  • Conteneurs standard . Listes

    Exemples simples de listes :

    couleurs = [trfle, carreau, coeur, pique]print(couleurs) # [trfle, carreau, coeur, pique]couleurs[1] = 14print(couleurs) # [trfle, 14, coeur, pique]list1 = [a, b]list2 = [4, 2.718]list3 = [list1, list2] # liste de listesprint(list3) # [[a, b], [4, 2.718]]

    .. Initialisations et tests dappartenanceUtilisation de la rptition, de litrateur dentiers range() et de loprateur dappartenance (in) :

    >>> truc = []>>> machin = [0.0] * 3>>> truc[]>>> machin[0.0, 0.0, 0.0]>>>>>> liste_1 = list(range(4))>>> liste_1[0, 1, 2, 3]>>> liste_2 = list(range(4, 8))>>> liste_2[4, 5, 6, 7]>>> liste_3 = list(range(2, 9, 2))>>> liste_3[2, 4, 6, 8]>>>>>> 2 in liste_1, 8 in liste_2, 6 in liste_3(True, False, True)

    .. Mthodeselques mthodes de modication des listes :

    >>> nombres = [17, 38, 10, 25, 72]>>> nombres.sort()>>> nombres[10, 17, 25, 38, 72]>>> nombres.append(12)>>> nombres.reverse()>>> nombres[12, 72, 38, 25, 17, 10]>>> nombres.remove(38)>>> nombres[12, 72, 25, 17, 10]>>> nombres.index(17)3>>> nombres[0] = 11>>> nombres[1:3] = [14, 17, 2]>>> nombres[11, 14, 17, 2, 17, 10]>>> nombres.pop()10>>> nombres[11, 14, 17, 2, 17]>>> nombres.count(17)2>>> nombres.extend([1, 2, 3])>>> nombres[11, 14, 17, 2, 17, 1, 2, 3]

    - -

  • . Tuples Conteneurs standard

    .. Manipulation des tranes (ou sous-anes)Syntaxe. Si on veut supprimer, remplacer ou insrer plusieurs lments dune liste, il faut indiquer une tranche(cf. .., p. ) dans le membre de gauche dune aectation et fournir une liste dans le membre de droite.

    >>> mots = [jambon, sel, miel, confiture, beurre]>>> mots[2:4] = [] # effacement par affectation dune liste vide>>> mots[jambon, sel, beurre]>>> mots[1:3] = [salade]>>> mots[jambon, salade]>>> mots[1:] = [mayonnaise, poulet, tomate]>>> mots[jambon, mayonnaise, poulet, tomate]>>> mots[2:2] = [miel] # insertion en 3 position>>> mots[jambon, mayonnaise, miel, poulet, tomate]

    .. Squences de squencesLes squences, comme du reste les autres conteneurs, peuvent tre imbriqus.Par exemple :

    >>> liste_1 = [1, 2, 3]>>> listes = [liste_1, [4, 5], abcd]>>>>>> for liste in listes:... for elem in liste:... print(elem)... print()...123

    45

    abcd

    . TuplesDnitionb Un tuple est une collection ordonne et non modiable dlments ventuellement htrognes.Syntaxe. lments spars par des virgules, et entours de parenthses.

    >>> mon_tuple = (a, 2, [1, 3])

    Lindexage des tuples sutilisent comme celui des listes ; le parcours des tuples est plus rapide que celui des listes ; ils sont utiles pour dnir des constantes.

    Attentionj Comme les chanes de caractres, les tuples ne sont pas modiables !

    >>> mon_tuple.append(4) # attention ne pas modifier un tuple !Traceback (most recent call last) :File , line 1, in

    AttributeError : tuple object has no attribute append

    - -

  • Conteneurs standard . Retour sur les rfrences

    Les oprations des objets de type squentielLes types prdnis de squences Python (chane, liste et tuple) ont en com-mun les oprations rsumes dans le tableau suivant o s et t dsignent deuxsquences du mme type et i, j et k des entiers :

    lopration son eetx in s True si s contient x, False sinonx not in s True si s ne contient pas x, False sinons + t concatnation de s et ts * n, n * s n copies (supercielles) concatnes de ss[i] ie lment de s ( partir de )s[i:j] tranche de s de i (inclus) j (exclu)s[i:j:k] tranche de s de i j avec un pas de klen(s) longueur de smax(s), min(s) plus grand, plus petit lment de ss.index(i) indice de la re occurrence de i dans ss.count(i) nombre doccurrences de i dans s

    . Retour sur les rfrencesNous avons dj vu que lopration daectation, apparemment innocente, est une relle dicult de

    Python.i = 1msg = Quoi de neuf ?e = 2.718

    Dans lexemple ci-dessus, les aectations ralisent plusieurs oprations : cration en mmoire dun objet du type appropri (membre de droite) ; stockage de la donne dans lobjet cr ; cration dun nom de variable (membre de gauche) ; association de ce nom de variable avec lobjet contenant la valeur.Une consquence de ce mcanisme est que, si un objet modiable est aect plusieurs variables, tout

    changement de lobjet via une variable sera visible sur tous les autres :fable = [Je, plie, mais, ne, romps, point]phrase = fable

    phrase[4] = casse

    print(fable) # [Je, plie, mais, ne, casse, point]

    Si on veut pouvoir eectuer des modications spares, il faut aecter lautre variable par une copiedistincte de lobjet, soit en crant une tranche complte des squences dans les cas simples, soit en utilisantle module copy dans les cas les plus gnraux (autres conteneurs). Dans les rares occasions o lon veutaussi que chaque lment et aribut de lobjet soit copi sparment et de faon rcursive, on emploie lafonction copy.deepcopy() :

    >>> import copy>>> a = [1, 2, 3]>>> b = a # une rfrence>>> b.append(4)>>> a[1, 2, 3, 4]>>> c = a[:] # une copie simple>>> c.append(5)>>> c[1, 2, 3, 4, 5]>>> d = copy.copy(a) # une copie de surface>>> d.append(6)>>> d

    - -

  • . Tableaux associatifs Conteneurs standard

    [1, 2, 3, 4, 6]>>> a[1, 2, 3, 4]>>> d1 = {a : [1, 2], b : [3, 4]}>>> d2 = {c : (1, 2, 3), c : (4, 5, 6)}>>> liste_de_dicos = [d1, d2]>>> nouvelle_liste_de_dicos = copy.deepcopy(liste_de_dicos) # copie profonde (ou rcursive)>>> nouvelle_liste_de_dicos[{a: [1, 2], b: [3, 4]}, {c: (4, 5, 6)}]

    .. Complment graphique sur lassignation Assignation augmente dun objet non modiable (cas dun entier : + Fig. .). On a reprsent

    ltape de laddition intermdiaire.

    ..a = 7. a. 7(a) Assignation dun entier

    ..a += 2. a. 7+2.

    9

    (b) Assignation augmente

    F . Assignation augmente dun objet non modiable.

    Assignation augmente dun objet modiable (cas dune liste :+ Fig. .). On a reprsent ltapede la cration de la liste intermdiaire.

    ..m = [5, 9]. m. [0]. [1].

    5

    .

    9

    (a) Assignation dune liste.

    ..m += [6, 1]. m. [0]. [1]. +=.

    6

    .

    1

    (b) Cration intermdiaire en mmoire

    ..m += [6, 1]. m. [0]. [1]. [2]. [3].

    5

    .

    0

    .

    6

    .

    1

    (c) Assignation augmente

    F . Assignation augmente dun objet modiable.

    . Tableaux associatifsDnitionb Un tableau associatif est un type de donnes permeant de stocker des couples (cle : valeur), avecun accs trs rapide la valeur partir de la cl, la cl ne pouvant tre prsente quune seule fois dans letableau.

    Il possde les caractristiques suivantes : loprateur dappartenance dune cl (in) la fonction taille (len()) donnant le nombre de couples stocks ; il est itrable (on peut le parcourir) mais nest pas ordonn.

    Python propose le type standard dict.

    - -

  • Conteneurs standard . Ensembles (set)

    .. Dictionnaires (dict)Syntaxe. Collection de couples cle : valeur entoure daccolades.

    Les dictionnaires constituent un type composite mais ils nappartiennent pas aux squences.Les dictionnaires sontmodiables mais non-ordonns : les couples enregistrs noccupent pas un ordre

    immuable, leur emplacement est gr par un algorithme spcique (algorithme de hash). Le caractrenon-ordonn des dictionnaire est le prix payer pour leur rapidit !

    Une cl pourra tre alphabtique, numrique en fait tout type hachable (donc liste et dictionnaireexclus). Les valeurs pourront tre de tout type sans exclusion.

    Exemples de cration

    >>> d1 = {} # dictionnaire vide. Autre notation : d1 = dict()>>> d1[nom] = 3>>> d1[taille] = 176>>> d1{nom: 3, taille: 176}>>>>>> d2 = {nom: 3, taille: 176} # dfinition en extension>>> d2{nom: 3, taille: 176}>>>>>> d3 = {x: x**2 for x in (2, 4, 6)} # dfinition en comprhension>>> d3{2: 4, 4: 16, 6: 36}>>>>>> d4 = dict(nom=3, taille=176) # utilisation de paramtres nomms>>> d4{taille: 176, nom: 3}>>>>>> d5 = dict([(nom, 3), (taille, 176)]) # utilisation dune liste de couples cls/valeurs>>> d5{nom: 3, taille: 176}

    Mthodeselques mthodes applicables aux dictionnaires :

    >>> tel = {jack: 4098, sape: 4139}>>> tel[guido] = 4127>>> tel{sape: 4139, jack: 4098, guido: 4127}>>> tel[jack]4098>>> del tel[sape]>>> tel[irv] = 4127>>> tel{jack: 4098, irv: 4127, guido: 4127}>>>>>> tel.keys()[jack, irv, guido]>>> sorted(tel.keys())[guido, irv, jack]>>> sorted(tel.values())[4098, 4127, 4127]>>> guido in tel, jack not in tel(True, False)

    . Ensembles (set)Dnitionb Un ensemble est une collection itrable non ordonne dlments hachables uniques.

    - -

  • . Fiiers textuels Conteneurs standard

    Donc un set est la transposition informatique de la notion densemble mathmatique.En Python, il existe deux types densemble, les ensembles modiables : set et les ensembles non mo-

    diables : frozenset. On retrouve ici les mmes dirences quentre les listes et les tuples.

    >>> X = set(spam)>>> Y = set(pass)>>> X{s, p, m, a}>>> Y # pas de duplication : quun seul s{s, p, a}>>> p in XTrue>>> m in YFalse>>> X - Y # ensemble des lments de X qui ne sont pas dans Y{m}>>> Y - X # ensemble des lments de Y qui ne sont pas dans Xset()>>> X ^ Y # ensemble des lments qui sont soit dans X soit dans Y{m}>>> X | Y # union{s, p, m, a}>>> X & Y # intersection{s, p, a}

    ..

    X

    .

    Y

    .m

    .s

    .

    p. a. p

    F . Oprations sur les ensembles.

    . Fiiers textuels.. Introduction

    On rappelle que lordinateur nexcute que les programmes prsents dans sa mmoire volatile (laRAM). Pour conserver durablement des informations, il faut utiliser une mmoire permanente commepar exemple le disque dur, la cl USB, le DVD, sur lesquels le systme dexploitation organise les don-nes sous la forme de chiers.

    Comme la plupart des langages, Python utilise classiquement la notion de chier.Nous limiterons nos exemples aux chiers textuels (lisibles par un diteur), mais signalons que les

    chiers stocks en codage binaire sont plus compacts et plus rapides grer (utiles pour les grands volumesde donnes).

    .. Gestion des iersOuverture et fermeture des iers

    Principaux modes douverture des chiers textuels :f1 = open(monFichier_1, r, encoding=utf8) # r mode lecturef2 = open(monFichier_2, w, encoding=utf8) # w mode crituref3 = open(monFichier_3, a, encoding=utf8) # a mode ajout

    . Remarquez que lon prcise lencoding. Ceci sera justi ultrieurement (cf. annexe C p. )

    - -

  • Conteneurs standard . Itrer sur les conteneurs

    Python utilise les chiers en mode texte par dfaut (mode t). Pour les chiers binaires, il faut prciserle mode b.

    Le paramtre optionnel encoding assure les conversions entre les types byte (cest--dire des tableauxdoctets), format de stockage des chiers sur le disque, et le type str (qui, en Python , signie toujoursUnicode), manipul lors des lectures et critures. Il est prudent de toujours lutiliser.

    Les encodages les plus frquents sont utf8 (cest lencodage privilgier en Python ), latin1,ascii

    Tant que le chier nest pas ferm , son contenu nest pas garanti sur le disque.Une seule mthode de fermeture :

    f1.close()

    criture squentielleLe chier sur disque est considr comme une squence de caractres qui sont ajouts la suite, au

    fur et mesure que lon crit dans le chier.Mthodes dcriture :

    f = open(truc.txt, w, encoding=utf8)s = toto\nf.write(s) # crit la chane s dans fl = [a, b, c]f.writelines(l) # crit les chanes de la liste l dans ff.close()

    f2 = open(truc2.txt, w, encoding=utf8)print(abcd, file=f2) # utilisation de loption filef2.close()

    Lecture squentielleEn lecture, la squence de caractres qui constitue le chier est parcourue en commenant au dbut

    du chier et en avanant au fur et mesure des lectures.Mthodes de lecture dun chier en entier :

    >>> f = open(truc.txt, r, encoding=utf8)>>> s = f.read() # lit tout le fichier --> chane>>> f.close()>>> f = open(truc.txt, r, encoding=utf8)>>> s = f.readlines() # lit tout le fichier --> liste de chanes>>> f.close()

    Mthodes de lecture dun chier partiel :

    >>> f = open(truc.txt, r, encoding=utf8)>>> s = f.read(3) # lit au plus n octets --> chane>>> s = f.readline() # lit la ligne suivante --> chane>>> f.close()>>>>>> # Affichage des lignes dun fichier une une>>> f = open(truc.txt, encoding=utf8) # mode r par dfaut>>> for ligne in f:... print(ligne)...>>> f.close()

    . Itrer sur les conteneursLes techniques suivantes sont classiques et trs utiles.Obtenir cls et valeurs en bouclant sur un dictionnaire :. ou bien ush par un appel la mthode flush().

    - -

  • . Aage format Conteneurs standard

    knights = {Gallahad : the pure, Robin : the brave}for k, v in knights.items() :

    print(k, v)# Gallahad the pure# Robin the brave

    Obtenir indice et lment en bouclant sur une liste :>>> for i, v in enumerate([tic, tac, toe]):... print(i, ->, v)...0 -> tic1 -> tac2 -> toe

    Boucler sur deux squences (ou plus) apparies :

    >>> questions = [name, quest, favorite color]>>> answers = [Lancelot, the Holy Grail, blue]>>> for question, answer in zip(questions, answers):... print(What is your, question, ? It is, answer)...What is your name? It is LancelotWhat is your quest? It is the Holy GrailWhat is your favorite color? It is blue

    Obtenir une squence inverse (la squence initiale est inchange) :for i in reversed(range(1, 10, 2)) :

    print(i, end= ) # 9 7 5 3 1

    Obtenir une squence trie lments uniques (la squence initiale est inchange) :basket = [apple, orange, apple, pear, orange, banana]for f in sorted(set(basket)) :

    print(f, end= ) # apple banana orange pear

    . Aage formatLa mthode format() permet de contrler nement la cration de chanes formates. On lutilisera

    pour un achage via print(), pour un enregistrement via f.write(), ou dans dautres cas.Remplacements simples :print({} {} {}.format(zro, un, deux)) # zro un deux

    # formatage dune chane pour usages ultrieurschain = {2} {0} {1}.format(zro, un, deux)

    print(chain) # affichage : deux zro unwith open(test.txt, w, encoding=utf8) as f :

    f.write(chain) # enregistrement dans un fichier

    print(Je mappelle {}.format(Bob)) # Je mappelle Bobprint(Je mappelle {{{}}}.format(Bob)) # Je mappelle {Bob}print({}.format(-*10)) # ----------

    Remplacements avec champs nomms :a, b = 5, 3print(The story of {c} and {d}.format(c=a+b, d=a-b)) # The story of 8 and 2

    Formatages laide de liste :stock = [papier, enveloppe, chemise, encre, buvard]print(Nous avons de l{0[3]} et du {0[0]} en stock\n.format(stock)) # Nous avons de lencre et du papier en stock

    - -

  • Conteneurs standard . Aage format

    Formatages laide de dictionnaire :print(My name is {0[name]}.format(dict(name=Fred))) # My name is Fred

    d = dict(poids = 12000, animal = lphant)print(L{0[animal]} pse {0[poids]} kg\n.format(d)) # Llphant pse 12000 kg

    Remplacement avec aributs nomms :import mathimport sys

    print(math.pi = {.pi}, epsilon = {.float_info.epsilon}.format(math, sys))# math.pi = 3.14159265359, epsilon = 2.22044604925e-16

    Conversions textuelles, str() et repr() :

    >>> print({0!s} {0!r}.format(texte\n))texte

    texte\n

    Formatages numriques :s = int :{0:d}; hex : {0:x}; oct : {0:o}; bin : {0:b}.format(42)print(s) # int :42; hex : 2a; oct : 52; bin : 101010s = int :{0:d}; hex : {0:#x}; oct : {0:#o}; bin : {0:#b}.format(42)print(s) # int :42; hex : 0x2a; oct : 0o52; bin : 0b101010

    n = 100pi = 3.1415926535897931k = -54

    print({ :.4e}.format(pi)) # 3.1416e+00print({ :g}.format(pi)) # 3.14159print({ :.2%}.format(n/(47*pi))) # 67.73%

    msg = Rsultat sur { :d} chantillons : { :.2f}.format(n, pi)print(msg) # Rsultat sur 100 chantillons : 3.14

    msg = {0.real} et {0.imag} sont les composantes du complexe {0}.format(3-5j)print(msg) # 3.0 et -5.0 sont les composantes du complexe (3-5j)

    print({ :+d} { :+d}.format(n, k)) # +100 -54 (on force laffichage du signe)

    print({ :,}.format(1234567890.123)) # 1,234,567,890.12

    Formatages divers :

    >>> s = The sword of truth>>> print([{}].format(s))[The sword of truth]>>> print([{:25}].format(s))[The sword of truth ]>>> print([{:>25}].format(s))[ The sword of truth]>>> print([{:^25}].format(s))[ The sword of truth ]>>> print([{:-^25}].format(s))[---The sword of truth----]>>> print([{:.>> lng = 12>>> print([{}].format(s[:lng]))[The sword of]>>> m = 123456789>>> print({:0=12}.format(m))000123456789

    . str() est un achage orient utilisateur alors que repr() est une reprsentation lirale.

    - -

  • C Fonctions et espaces de noms

    Les fonctions sont les lments structurants de base de tout langage pro-cdural.Elles orent dirents avantages :

    vitent la rptition : on peut factoriser une portion de code qui se r-pte lors de lexcution en squence dun script ;

    Mettent en relief les donnes et les rsultats : entres et sorties de la fonc-tion ;

    Permettent la rutilisation : mcanisme de limport ;Dcomposent une te complexe en tes plus simples : conception de

    lapplication.Ces avantages sont illustrs sur la gure . qui utilise entre autres la no-

    tion dimport, mcanisme trs simple qui permet de rutiliser des chiers defonctions, souvent appels modules ou bibliothques.

    . Dnition et syntaxeDnitionb Une fonction est un ensemble dinstructions regroupes sous un nom et sexcutant la demande.

    On doit dnir une fonction chaque fois quun bloc dinstructions se trouve plusieurs reprises dansle code ; il sagit dune factorisation de code .Syntaxe. La dnition dune fonction se compose : du mot cl def suivi de lidenticateur de la fonction, de parenthses entourant les paramtres

    de la fonction spars par des virgules, et du caractre deux points qui termine toujours uneinstruction compose ;

    dune chane de documentation (ou docstring) indente comme le corps de la fonction ; du bloc dinstructions indent par rapport la ligne de dnition, et qui constitue le corps de la

    fonction.Le bloc dinstructions est obligatoire. Sil est vide, on emploie linstruction pass.La documentation, bien que facultative, est fortement conseille.def afficheAddMul(a, b) :

    Calcule et affiche :- la somme de a et b,- le produit de a et b.

  • Fonctions et espaces de noms . Dnition et syntaxe

    ..

    A

    .

    B

    .

    C

    .

    D

    .

    B.E.

    A

    .

    C

    .

    D

    .

    E.

    B

    .

    APPEL/RETOUR

    .

    APPEL/RETOUR

    (a) vite la duplication de code

    ..

    # util.py

    .

    def proportion(chaine, motif):

    .

    Frquence de dans .

    .

    n = len(chaine)

    .k = chaine.count(motif)

    . return k/n(b) Met en relief entres et sorties

    ..

    import util

    .

    ...

    .

    p1 = util.proportion(une_chaine, le)

    .

    ...

    .p2 = util.proportion(une_autre_chaine, des)

    . ...(c) Linstruction import permet la rutilisation

    ..

    problmeinitialcomplexe

    .sous-problmecomplexe

    .sous-problme 1

    . sous-problme 2

    .

    sous-problme 3

    .

    sous-problme 4

    (d) Amliore la conception

    F . Les avantages de lutilisation des fonctions.

    - -

  • . Passage des arguments Fonctions et espaces de noms

    somme = a + bproduit = a * bprint(La somme de, a, et, b, est, somme, et le produit, produit)

    . Passage des arguments.. Mcanisme gnralRemarque3 Passage par aectation : chaque paramtre de la dnition de la fonction correspond, dans lordre, un argument de lappel. La correspondance se fait par aectation des arguments aux paramtres.

    ..

    dfinition

    .

    def maFonction(x, y, z):

    .

    a = z / x

    .

    b = 2 + y

    .

    return a, b

    .c, d = maFonction(7, k, 1.618)

    .appel

    .

    x = 7

    .

    y = k

    .

    z = 1.618

    .

    affectation

    F . Passage par aectation des arguments dappel aux paramtres de dnition.

    .. Un ou plusieurs paramtres, pas de retourExemple sans linstruction return, ce quon appelle souvent une procdure . Dans ce cas la fonction

    renvoie implicitement la valeur None :def table(base, debut, fin) :

    Affiche la table de multiplication des de .n = debutwhile n

  • Fonctions et espaces de noms . Passage des arguments

    Retourne le volume dune sphre de rayon ;return 4.0 * pi * cube(r) / 3.0

    # Saisie du rayon et affichage du volumerayon = float(input(Rayon : ))print(Volume de la sphre =, volumeSphere(rayon))

    Exemple avec utilisation dun return multiple :import math

    def surfaceVolumeSphere(r) :surf = 4.0 * math.pi * r**2vol = surf * r/3return surf, vol

    # programme principalrayon = float(input(Rayon : ))s, v = surfaceVolumeSphere(rayon)print(Sphre de surface { :g} et de volume { :g}.format(s, v))

    .. Passage dune fonction en paramtrePuisque en Python une variable peut rfrencer une fonction, on peut transmere une fonction comme

    paramtre :

    >>> def f(x):... return 2*x+1...>>> def g(x):... return x//2...>>> def h(fonc, x):... return fonc(x)...>>> h(f, 3)7>>> h(g, 4)2

    .. Paramtres avec valeur par dfautIl est possible de spcier, lors de la dclaration, des valeurs par dfaut utiliser pour les arguments.

    Cela permet, lors de lappel, de ne pas avoir spcier les paramtres correspondants.Il est galement possible, en combinant les valeurs par dfaut et le nommage des paramtres, de nin-

    diquer lappel que les paramtres dont on dsire modier la valeur de largument. Il est par contrencessaire de regrouper tous les paramtres optionnels la n de la liste des paramtres.

    >>> def accueil(nom, prenom, depart=MP, semestre=S2):... print(prenom, nom, Dpartement, depart, semestre, semestre)...>>> accueil(Student, Joe)Joe Student Dpartement MP semestre S2>>> accueil(Student, Eve, Info)Eve Student Dpartement Info semestre S2>>> accueil(Student, Steph, semestre=S3)Steph Student Dpartement MP semestre S3

    Attentionj On utilise de prfrence des valeurs par dfaut non modiables (int, float, str, bool, tuple) car lamodication dun paramtre par un premier appel est visible les fois suivantes.

    Si on a besoin dune valeur par dfaut qui soit modiable (list, dict), on utilise la valeur prdnieNone et on fait un test dans la fonction avant modication :

    def maFonction(liste=None) :if liste is None :

    liste = [1, 3]

    - -

  • . Espaces de noms Fonctions et espaces de noms

    .. Nombre darguments arbitraire : passage dun tuple de valeursLe passage dun nombre arbitraire darguments est permis en utilisant la notation dun argument nal

    *nom. Les paramtres surnumraires sont alors transmis sous la forme dun tuple aect cet argument(que lon appelle gnralement args).def somme(*args) :

    Renvoie la somme du tuple .resultat = 0for nombre in args :

    resultat += nombrereturn resultat

    # Exemples dappel :print(somme(23)) # 23print(somme(23, 42, 13)) # 78

    Attentionj Si la fonction possde plusieurs arguments, le tuple est en dernire position.

    Rciproquement il est aussi possible de passer un tuple (en fait une squence) lappel qui sera d-compress en une liste de paramtres dune fonction classique .

    def somme(a, b, c) :return a+b+c

    # Exemple dappel :elements = (2, 4, 6)print(somme(*elements)) # 12

    .. Nombre darguments arbitraire : passage dun dictionnaireDe lamme faon, il est possible dautoriser le passage dun nombre arbitraire darguments nomms en

    plus de ceux prvus lors de la dnition en utilisant la notation dun argument nal **nom. Les paramtressurnumraires nomms sont alors transmis sous la forme dun dictionnaire aect cet argument (quelon appelle gnralement kwargs pour keyword args).

    Rciproquement il est aussi possible de passer un dictionnaire lappel dune fonction, qui sera d-compress et associ aux paramtres nomms de la fonction.

    def unDict(**kwargs) :return kwargs

    # Exemples dappels## par des paramtres nomms :print(unDict(a=23, b=42)) # {a : 23, b : 42}

    ## en fournissant un dictionnaire :mots = {d : 85, e : 14, f :9}print(unDict(**mots)) # {e : 14, d : 85, f : 9}

    Attentionj Si la fonction possde plusieurs arguments, le dictionnaire est en toute dernire position (aprs unventuel tuple).

    . Espaces de nomsUn espace de noms est une notion permeant de lever une ambigut sur des termes qui pourraient

    tre homonymes sans cela. Il est matrialis par un prxe identiant de manire unique la signicationdun terme. Au sein dun mme espace de noms, il ny a pas dhomonymes :

    >>> import math>>> pi = 2.718>>> print(pi) # une valeur de lespace de nom local

    - -

  • Fonctions et espaces de noms . Espaces de noms

    2.718>>> print(math.pi) # une valeur de lespace de noms math3.141592653589793

    .. Porte des objetsOn distingue :

    La porte globale : celle du module ou du chier script en cours. Un dictionnaire gre les objets globaux :linstruction globals() fournit un dictionnaire contenant les couples nom:valeur ;

    La porte locale : les objets internes aux fonctions sont locaux. Les objets globaux ne sont pas modiablesdans les portes locales. Linstruction locals() fournit un dictionnaire contenant les couples nom:valeur.

    .. Rsolution des noms : rgle LGI La recherche des noms est dabord locale (L), puis globale (G), enn interne (I) (+ Fig. .) :

    ..

    Interne

    .

    Noms prdfinis : open, len,...

    .

    Global

    .

    Noms affects la base dun module

    .

    Noms dclars global dans

    .

    une fonction ou un module

    .

    Local

    .

    Noms affects dans

    .

    une fonction ou un module

    F . Rgle LGI

    Exemples de portePar dfaut, tout identicateur utilis dans le corps dune fonction est local celle-ci. Si une fonction a

    besoin de modier certains identicateurs globaux, la premire instruction de cee fonction doit tre :global

    Par exemple :# x et fonc sont affects dans le module => globaux

    def fonc(y) : # y et z sont affects dans fonc => locauxglobal x # permet de modifier x ligne suivantex = x + 2z = x + yreturn z

    x = 99print(fonc(1)) # 102print(x) # 101

    # x et fonc sont affects dans le module => globaux

    def fonc(y) : # y et z sont affects dans fonc => locaux# dans fonc : porte localez = x + yreturn z

    x = 99print(fonc(1)) # 100print(x) # 99

    - -

  • . Espaces de noms Fonctions et espaces de noms

    # x et fonc sont affects dans le module => globaux

    def fonc(y) : # y, x et z sont affects dans fonc => locauxx = 3 # ce nouvel x est local et masque le x globalz = x + yreturn z

    x = 99print(fonc(1)) # 4print(x) # 99

    - -

  • C

    Modules et packages

    Un programme Python est gnralement compos de plusieurs chierssources, appels modules.Sils sont correctement cods les modules doivent tre indpendants les

    uns des autres pour tre rutiliss la demande dans dautres programmes.Ce chapitre explique comment coder des modules et comment les importer

    dans un autre.Nous verrons galement la notion de package qui permet de grouper plu-

    sieurs modules.

    . ModulesDnitionb Module : chier script Python permeant de dnir des lements de programme rutilisables. Cemcanisme permet dlaborer ecacement des bibliothques de fonctions ou de classes.

    Avantages des modules : rutilisation du code ; la documentation et les tests peuvent tre intgrs au module ; ralisation de services ou de donnes partags ; partition de lespace de noms du systme.

    Remarque3 Lorsquon parle du module, on omet lextention : le module machin est dans le chier machin.py.

    .. ImportLinstruction import charge et excute le module indiqu sil nest pas dj charg. Lensemble des

    dnitions contenues dans ce module deviennent alors disponibles : variables globales, fonctions, classes.Suivant la syntaxe utilise, on accde aux dnitions du module de direntes faons : linstruction import donne accs lensemble des dnitions du module import en

    utilisant le nom du module comme espace de nom.

  • Modules et paages . Modules

    >>> import tkinter>>> print(Version de tkinter :, tkinter.TkVersion)Version de tkinter : 8.5

    linstruction from import nom1, nom2donne accs directement une slection choi-sie de noms dnis dans le module.

    >>> from math import pi, sin>>> print(Valeur de Pi :, pi, sinus(pi/4) :, sin(pi/4))Valeur de Pi : 3.14159265359 sinus(pi/4) : 0.707106781187

    Dans les deux cas, le module et ses dnitions existent dans leur espacemmoire propre, et on dupliquesimplement dans le module courant les noms que lon a choisi, comme si on avait fait les aectations :

    >>> sin = math.sin>>> pi = math.pi

    Remarque3 Il est conseill dimporter dans lordre :

    les modules de la bibliothque standard ; les modules des bibliothques tierces ; Les modules personnels.

    Attentionj Pour tout ce qui est fonction et classe, ainsi que pour les constantes (variables globales dnieset aecte une fois pour toute une valeur), limport direct du nom ne pose pas de problme.

    Par contre, pour les variables globales que lon dsire pouvoir modier, il est prconis de passersystmatiquement par lespace de nom du module an de sassurer de lexistence de cee variable en ununique exemplaire ayant la mme valeur dans tout le programme.

    .. ExemplesNotion d auto-test

    Le module principal est celui qui est donn en argument sur la ligne de commande ou qui est lanc enpremier lors de lexcution dun script. Son nom est contenu dans la variable globale __name__. Sa valeurdpend du contexte de lexcution.

    Soit le module :

    # je_me_nomme.pyprint(Je me nomme :, __name__)

    Premier contexte excution sur la ligne de commande (ou dans un EDI), on obtient la valeur de la variableprdnie __main__ :

    $ python3 je_me_nomme.pyJe me nomme : __main__

    Second contexte import de ce module (ce nest donc plus le module principal ), on obtient lidenticateurdu module :

    >>> import je_me_nommeJe me nomme : je_me_nomme

    Grce un test, on peut donc facilement savoir si le code est excut en tant que script principal : on crit un script de fonctions ou de classes (souvent appel bibliothque) et on termine le chier

    par un test, l auto-test , pour vrier que lon est dans le module principal. On en prote pourvrier tous les lments de la bibliothque ;

    quand on importe le script, le test inclus est faux et on se borne utiliser la bibliothque.

    - -

  • . Batteries included Modules et paages

    # cube.py

    def cube(x) :retourne le cube de .return x**3

    # auto-test ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~if __name__ == __main__ : # vrai car module principal

    if cube(9) == 729:print(OK !)else :

    print(KO !)

    Utilisation de ce module dans un autre (par exemple celui qui contient le programme principal) :import cube

    # programme principal ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~for i in range(1, 4) :

    print(cube de, i, =, cube_m.cube(i))

    cube de 1 = 1cube de 2 = 8cube de 3 = 27

    Autre exemple :def ok(message) :

    Retourne True si on saisie , , , ou ,False dans tous les autres cas.s = input(message + (O/n) ? )return True if s == or s[0] in OoYy else False

    # auto-test ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~if __name__ == __main__ :

    while True :if ok(Encore) :

    print(Je continue)else :

    print(Je marrte)break

    Encore (O/n) ?Je continueEncore (O/n) ? oJe continueEncore (O/n) ? nJe marrte

    . Batteries includedOn dit souvent que Python est livr piles comprises (baeries included) tant sa bibliothque stan-

    dard, riche de plus de packages et modules, rpond aux problmes courants les plus varis.Ce survol prsente quelques fonctionnalits utiles.

    La gestion des anesLe module string fournit des constantes comme ascii_lowercase, digitsainsi que la classe Format-

    ter qui peut tre spcialise en sous-classes de formateurs de chanes.Le module textwrap est utilis pour formater un texte : longueur de chaque ligne, contrle de linden-

    tation.

    - -

  • Modules et paages . Batteries included

    Le module struct permet de convertir des nombres, boolens et des chanes en leur reprsentationbinaire an de communiquer avec des bibliothques de bas-niveau (souvent en C).

    Le module difflib permet la comparaison de squences et fournit des sorties au format standard di ou en HTML.

    Enn on ne saurait oublier le module re qui ore Python la puissance des expressions rgulires .

    La gestion de la ligne de commandePour grer la ligne de commande, Python propose linstruction sys.argv. Elle fournit simplement une

    liste contenant les arguments de la ligne de commande : argv[1], argv[2]sachant que argv[0] est lenom du script lui-mme.

    Par ailleurs, Python propose un module de parsing , le module argparse.Cest un module objet qui sutilise en trois tapes :. cration dun objet parser ;. ajout des arguments prvus en utilisant la mthode add_argument(). Chaque argument peut dclen-

    cher une action particulire spcie dans la mthode ;. analyse de la ligne de commande par la mthode parse_args().Enn, selon les paramtres dtects par lanalyse, on eectue les actions adaptes.Dans lexemple suivant, extrait de la documentation ocielle du module, on se propose de donner en

    argument la ligne de commande une liste dentiers. Par dfaut le programme retourne le plus grand entierde la liste, mais sil dtecte largument sum, il retourne la somme des entiers de la liste. De plus, lanc avecloption -h ou help, le module argparse fournit automatiquement une documentation du programme :# -*- coding : utf8 -*-import argparse

    # 1. cration du parserparser = argparse.ArgumentParser(description=Process some integers)

    # 2. ajout des argumentsparser.add_argument(integers, metavar=N, type=int, nargs=+,

    help=an integer for the accumulator)

    parser.add_argument(--sum, dest=accumulate, action=store_const,const=sum, default=max,help=sum the integers (default : find the max)

    # 3. parsing de la ligne de commandeargs = parser.parse_args()

    # processingprint(args.accumulate(args.integers))

    Voici les sorties correspondant aux dirents cas de la ligne de commande :

    $ python argparse.py -husage: argparse.py [-h] [--sum] N [N ...]

    Process some integers.

    positional arguments:N an integer for the accumulator

    optional arguments:-h, --help show this help message and exit--sum sum the integers (default: find the max)

    $ python argparse.py --helpusage: argparse.py [-h] [--sum] N [N ...]

    Process some integers.

    . Cest tout un monde. analyse grammaticale de la ligne de commande.

    - -

  • . Batteries included Modules et paages

    positional arguments:N an integer for the accumulator

    optional arguments:-h, --help show this help message and exit--sum sum the integers (default: find the max)

    $ python argparse.py 1 2 3 4 5 6 7 8 99

    $ python argparse.py 1 2 3 4 5 6 7 8 9 --sum45

    La gestion du temps et des datesLes modules calendar, time et datetime fournissent les fonctions courantes de gestion du temps et des

    dures :import calendar, datetime, time

    moon_apollo11 = datetime.datetime(1969, 7, 20, 20, 17, 40)print(moon_apollo11)print(time.asctime(time.gmtime(0)))# Thu Jan 01 00:00:00 1970 (epoch UNIX)

    vendredi_precedent = datetime.date.today()un_jour = datetime.timedelta(days=1)while vendredi_precedent.weekday() != calendar.FRIDAY :

    vendredi_precedent -= un_jourprint(vendredi_precedent.strftime(%A, %d-%b-%Y))# Friday, 09-Oct-2009

    Algorithmes et types de donnes collectionLe module bisect fournit des fonctions de recherche de squences tries. Le module array propose un

    type semblable la liste, mais plus rapide car de contenu homogne.Le module heapq gre des tas dans lesquels llment dindex est toujours le plus petit :import heapqimport random

    heap = []for i in range(10) :

    heapq.heappush(heap, random.randint(2, 9))

    print(heap) # [2, 3, 5, 4, 6, 6, 7, 8, 7, 8]

    linstar des structures C, Python propose dsormais, via le module collections, la notion de typetuple nomm (il est bien sr possible davoir des tuples nomms embots) :

    import collections

    # description du type :Point = collections.namedtuple(Point, x y z)# on instancie un point :point = Point(1.2, 2.3, 3.4)# on laffiche :print(point : [{}, {}, {}]

    .format(point.x, point.y, point.z)) # point : [1.2, 2.3, 3.4]

    Le type defaultdict permet des utilisations avances :from collections import defaultdict

    s = [(y, 1), (b, 2), (y, 3), (b, 4), (r, 1)]d = defaultdict(list)

    - -

  • Modules et paages . Python scientique

    for k, v in s :d[k].append(v)print(d.items())# dict_items([(y, [1, 3]), (r, [1]), (b, [2, 4])])

    s = mississippid = defaultdict(int)for k in s :

    d[k] += 1print(d.items())# dict_items([(i, 4), (p, 2), (s, 4), (m, 1)])

    Et tant dautres domainesBeaucoup dautres sujets pourraient tre explors : accs au systme ; utilitaires chiers ; programmation rseau ; persistance ; les chiers XML ; la compression ;

    . Python scientiqueDans les annes , Travis Oliphant et dautres commencrent laborer des outils ecaces de trai-

    tement des donnes numriques : Numeric, Numarray, et enn NumPy. SciPy, bibliothque dalgorithmesscientiques, a galement t cre partir de NumPy. Au dbut des annes , John Hunter cre mat-plotlib un module de tracer de graphiques D. la mme poque Fernando Perez cre IPython en vuedamliorer lintractivit et la productivit en Python.

    En moins de ans aprs sa cration, les outils essentiels pour faire de Python un langage scientiqueperformant tait en place.

    .. Bibliothques mathmatiques et types numriquesOn rappelle que Python possde la bibliothque math :

    >>> import math>>> math.pi / math.e1.1557273497909217>>> math.exp(1e-5) - 11.0000050000069649e-05>>> math.log(10)2.302585092994046>>> math.log(1024, 2)10.0>>> math.cos(math.pi/4)0.7071067811865476>>> math.atan(4.1/9.02)0.4266274931268761>>> math.hypot(3, 4)5.0>>> math.degrees(1)57.29577951308232

    Par ailleurs, Python propose en standard les modules fraction et decimal :from fractions import Fractionimport decimal as d

    print(Fraction(16, -10)) # -8/5print(Fraction(123)) # 123print(Fraction( -3/7 )) # -3/7print(Fraction(-.125)) # -1/8

    - -

  • . Python scientique Modules et paages

    print(Fraction(7e-6)) # 7/1000000

    d.getcontext().prec = 6print(d.Decimal(1) / d.Decimal(7)) # 0.142857d.getcontext().prec = 18print(d.Decimal(1) / d.Decimal(7)) # 0.142857142857142857

    En plus des bibliothques math et cmath dj vues, la bibliothque random propose plusieurs fonctionsde nombres alatoires.

    .. Linterprteur IPythonRemarque3 On peut dire que IPython est devenu de facto linterprteur standard du Python scientique.

    En mars , ce projet a valu le Prix du dveloppement logiciel libre par la Free Soware Foundation son crateur Fernando Perez. Depuis dbut et pour deux ans, la fondation Alfred P. Sloan subven-tionne le dveloppement de IPython.

    IPython (actuellement en version .X) est disponible en trois dclinaisons (+ Fig. . et .) :ipython linterprteur de base ;ipython qtconsole sa version amliore dans une fentre graphique de la bibliothque graphique Qt,

    agrmente dun menu ;ipython notebook sa dernire variante qui ore une interface simple mais trs puissante dans le naviga-

    teur par dfaut.

    (a) ipython (b) ipython qtconsole

    F . IPython en mode console texte ou graphique.

    La version notebook mrite une mention spciale : Chaque cellule du notebook peut tre du code, desgures, du texte enrichi (y compris des formules mathmatiques), des vidos, etc.

    La gure . prsente un exemple de trac interactif.

    ObjectifsDaprs ses concepteurs, les objectifs dIPython sont les suivants : Fournir un interprteur Python plus puissant que celui par dfaut. IPython propose de nombreuses

    caractristiques comme lintrospection dobjet, laccs au shell systme ainsi que ses propres com-mandes permeant une grande interaction avec lutilisateur.

    Proposer un interprteur embarquable et prt lemploi pour vos programmes Python. IPythonseorce dtre un environnement ecace la fois pour le dveloppement de code Python et pourla rsolution des problmes lis lutilisation dobjets Python.

    Orir un ensemble de librairies pouvant tre utilis comme environnement pour dautres systmesutilisant Python comme langage sous-jacent (particulirement pour les environnements scienti-ques comme matlab, mapple ou mathematica).

    Permere le test interactif des librairies graphiques gres comme Tkinter, wxPython, PyGTK alorsque IDLE ne le permet quavec des applications Tkinter.

    - -

  • Modules et paages . Python scientique

    F . ipython notebook

    elques caractristiques

    IPython est auto-document. Coloration syntaxique. Les docstrings des objets Python sont disponibles en accolant un ? au nom de lobjet ou

    pour une aide plus dtaille. Numrote les entres et les sorties. Organise les sorties : messages derreur ou retour la ligne entre chaque lment dune liste si on

    lache. Auto-compltion avec la touche TAB : Lauto-compltion trouve les variables qui ont t dclares.

    Elle trouve les mots cls et les fonctions locales. La compltion des mthodes sur les variables tiennent compte du