La syntaxe Python
Guillaume Wisniewski septembre 2010
Ce document a pour objectif de présenter rapidement la syntaxe de Python ainsi que certaines constructions et bibliothèques que nous utiliserons dans ce cours. Une introduction plus détaillée au langage est disponible à l’url
Table des matières
Il y a deux manière d’exécuter un programme python :
– soit en sauvegardant le programme dans un fichier (ayant généralement l’extension .py) et en exécutant la commande : python .
– soit en utilisant directement l’interpréteur : en lan¸cant le programme python il est possible d’entrer directement des commandes qui seront exécutées au fur et à mesure de leur saise.
Dans les exemples de ce document, nous utiliserons cette dernière méthode : les lignes commen¸cant par In [1]: correspondent aux commandes qui sont saisies et les autres aux « réponses » de l’interpréteur.
Python est un langage typé dynamiquement : le type d’une variable est déterminé par l’interpréteur au moment de l’exécution et n’a pas besoin d’être déclaré :
In [17]: a = 1 # a est de type integer In [18]: b = 2.0 # b est de type float In [19]: a = "le chat" # a est maitenant de type string In [1]: c = 3 + 2j # nombre complexes In [2]: print c Out[2]: (3+2j) In [3]: d = 1 == 2 # booléens In [4]: d # dans l’interpréteur, le print n’est pas obligatoire Out[4]: False In [1]: e, f = 3, 2.1 |
On remarquera que :
– le marqueur de fin de ligne est le retour chariot et non le point virgule comme dans la plupart des autres langage;
– le caractère # permet d’indiquer un commentaire;
– il est possible d’effectuer plusieurs assignations simultanément.
Python fournit de manière standard différents types de collections. Chacune de ces collections est un objet et il est donc possible d’utiliser les méthodes d’exploration dynamique pour connaˆ?tre la liste des méthodes disponibles (cf. paragraphe ??).
a = [1, 2, 3, 4, "maman", 5.1]
Les listes peuvent stocker, de manière ordonnée, des éléments de différents types.
Il est possible :
– d’accéder directement à un élément
In [4]: r = [1, 2, 3, 7] In [5]: r[2] Out[5]: 3 In [6]: r[-1] Out[6]: 7 In [11]: r[-3] Out[11]: 2 |
En utilisant des indices négatifs, il est possible d’accéder aux éléments en partant de la fin (l’indice ?1 correspond au dernier élément, ?2 à l’avantdernier, )
– d’extraire des sous-listes :
# tous les éléments renvoyés sont des listes In [4]: r Out[4]: [1, 2, 3, 7] In [7]: r[3:] Out[7]: [7] In [8]: r[2:] Out[8]: [3, 7] In [9]: r[:2] Out[9]: [1, 2] In [10]: r[::2] Out[10]: [1, 3] |
La syntaxe générale est : [indice début:indice fin:pas]. Ces paramètres sont facultatifs : par défaut, indice début correspond au premier indice de la liste (0), indice fin au dernier indice et pas à 1. En utilisant des pas négatifs, il est possible de parcourir la liste à l’envers. Par exemple a[::-1] permet d’inverser la liste (on parcours la liste du début à la fin avec un pas de ?1).
– d’ajouter des éléments à une liste
In [12]: a = [1, 2, 3]
In [13]: a.append(4)
In [14]: print a
[1, 2, 3, 4]
In [15]: b = [5, 6]
In [16]: a + b
Out[16]: [1, 2, 3, 4, 5, 6]
– de trier une liste
In [2]: r = [2, 7, 1, 3] # la liste est en triée « en place » # => renvoie None In [3]: r.sort() # crée une nouvelle liste triée In [5]: a = sorted(r) In [4]: print r Out[4]: [1, 2, 3, 7] |
– de transformer une liste en chaˆ?ne de caractères :
In [7]: a = ["le", "petit", "chat"]
In [8]: "-".join(a)
Out[8]: ’le-petit-chat’
Les dictionnaires permettent d’associer deux objets quelconques : le premier objet définit une clé; le suivant la valeur qui lui est associé.
In [29]: d = {’a’: 1, ’b’:1.2, ’c’:1j}
In [30]: d[’b’]
Out[30]: 1.2
In [31]: d[’d’] = ’d’
In [32]: d
Out[32]: {’a’: 1, ’b’: 1.2, ’c’: 1j, ’d’: ’d’}
In [33]: d.keys()
Out[33]: [’a’, ’c’, ’b’, ’d’]
In [34]: d.values()
Out[34]: [1, 1j, 1.2, ’d’]
a = ’Mine’ a = "Chris’s" # cha^?nes sur plusieurs lignes a = ’’’Mine and not his’’’ a = """Mine and Chris’s""" |
– les chaˆ?nes de caractères sont des listes :
In [35]: s = ’Python is cool’ In [36]: s[-4:] Out[36]: ’cool’ |
– python fournit plusieurs méthodes intéressante :
In [1]: a = "Python is cool"
In [2]: a.replace("cool", "powerful")
Out[2]: ’Python is powerful’
In [3]: a.lower()
Out[3]: ’python is cool’
Nous verrons au paragraphe ?? comment découvrir facilement la liste complète des méthodes disponibles.
– substitution de chaˆ?ne de caractères
In [38]: ’An integer: %i; a float: %f; another string: %s’ % (1, 0.1, ’string’ Out[38]: ’An integer: 1; a float: 0.100000; another string: string’ |
)
– construction d’une liste :
In [9]: "1;2;3;4".split(";")
Out[9]: [’1’, ’2’, ’3’, ’4’]
In [11]: "1 2 3 4".split()
Out[11]: [’1’, ’2’, ’3’, ’4’]
split(sep) retourne la liste des mots contenus dans une chaˆ?ne de caractères en supposant que ceux-ci sont séparés par sep. Si sep n’est pas fournit split considère que les mots sont séparés par un ou plusieurs espaces.
In [23]: if a == 1: .: print 1 .: elif a == 2: .: print 2 .: else: .: print "beaucoup" .: .: beaucoup – soit sur des expressions booléennes – soit sur des objets : un objet est vrai si sa valeur n’est pas nulle ou si sa longueur est strictement plus grande que 0 (pour les séquences) :
– il est également possible de tester si un objet appartient à une collection en utilisant le mot-clé in
3.2 BouclesPour itérer sur un index :
Cette boucle est équivalente au code C suivant :
La fonction range permet de construire une liste d’entiers consécutifs : range(4) = [0, 1, 2, 3]. Il est possible d’itérer sur n’importe quelle séquence :
Python is powerful Python is readable et même :
La virgule à la fin du print permet d’éviter le retour chariot. Python dispose également d’une boucle while
3.3 Utilisation avancée des bouclesLa boucle for permet de parcourir les éléments d’un dictionnaire :
Il est possible de construire directement des listes à l’aide de list comprehension : In [4]: [i ** 2 for i in range(4)] Out[4]: [0, 1, 4, 9] In [5]: vowels = ’aeiouy’ In [6]: [i for i in "powerfull" if i in vowels] Out[6]: [’o’, ’e’, ’u’] Pour parcourir une liste en conservant les indices des éléments, on peut utiliser le mot-clé enumerate :
4 Définir des fonctionsUne fonction est définie par le mot-clé def :
Comme pour les structures de contrôles, le corps de la fonction est délimité par l’indentation. Une fonction peut, de manière optionnelle, renvoyer une valeur grâce au mot-clé return. Au moment de l’appel, l’interpréteur s’assure que le nombres de paramètres de la fonction est correct :
ipython console> in <module>() TypeError: double_it() takes exactly 1 argument (0 given) Il est également possible de définir des paramètres ayant des valeurs par défaut :
On peut spécifier les paramètres en utilisant leur nom :
Il est possible qu’une fonction retourne plusieurs valeurs :
Cette exemple montre plusieurs éléments intéressant de python : – la possibilité de retourner plusieurs valeurs dans une fonction; – l’utilisation des fonctions sum et len; – l’utilisation des docstring (la chaˆ?ne de caractères sous le nom de la fonction) pour documenter la fonction; Il est possible d’accéder à la docstring d’une fonction directement depuis l’interpréteur python grâce à la commande help
5 Les objetsVoici un exemple d’objet en python
1. toutes les méthodes de l’objet prennent obligatoirement, en premier argument une référence à l’objet (correspondant au this en Java ou en C++). Par convention, cet argument s’appelle toujours self. 2. la méthode correspondant au constructeur s’appelle __init__; pour créer un objet il suffit d’appeller le nom de l’objet en passant les paramètres (b = Basket()) 3. il n’y a pas de mode d’accès en python (private, public en java); tous les attributs sont publics. 4. si b est une référence sur un objet, on peut accéder à ses attributs par b.nom_attribut et appeler ses méthodes par b.methode() (en fournis- sant, si nécessaire, les paramètres) – os qui contient des fonctions permettant de manipuler le système de fichier; – re pour utiliser des expressions régulières; – codec pour lire des fichiers contenant des accents; – sys qui permet d’accéder au système et notamment aux entrées et sorties standards; – pickle qui permet de sauvegarder (et de recharger) un objet dans un fichier. Il est possible de définir ses propres bibliothèques. Si l’on suppose que l’on dispose d’un fichier définissant une fonction build_from_directory et d’une classe Corpus, il est possible d’utiliser ceux-ci dans n’importe quel autre fichier python après avoir fait : from corpus import Corpus, build_from_directory Il faut toutefois que les deux fichiers soient dans le même répertoire. 6.2 Aide dynamiqueIl est possible de connaˆ?tre le contenu d’un module de manière dynamique à l’aide des commandes dir et help :
La commande dir permet d’accéder aux noms des fonctions et des objets contenus dans un module et des méthodes d’un objet; la commande dir permet d’obtenir l’aide correspondant à une variable, à une fonction, à un objet ou à un module. Cette aide est définie par les docstring. In [28]: a = {} In [29]: dir(a) Out[29]: [’clear’, ’copy’,
7 Utilisation de fichiersL’ouverture et la fermeture d’un fichier se font par l’intermédiaire des commandes open et close : In [67]: fp = open("", mode="r") In [68]: fp Out[68]: <open file ’’, mode ’r’ at 0xea1ec0> In [73]: fp.close() Un fichier peut être ouvert dans les modes suivant : – lecture seul (mode="r") – écriture seule (mode="w", si le fichier existe il est alors écrasé) – ajout (mode="a") Il est possible de lire un fichier ligne par ligne ou de lire toutes les lignes dans une liste en une seule opération :
\n"
\n" En utilisant une boucle for, il est possible d’itérer directement sur les lignes d’un fichier :
|