Python 2 : Différence entre versions

De TARENTINO
Aller à la navigationAller à la recherche
 
(125 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
{{4bords}}
+
{{Menu_Python}}{{En_resume}}{{Coulpython}}{{Pythonline3}}{{Sideprogobjet}}{{Sidebaradm}}{{Navigationp}}
{{Menu_Python}}{{References}}
+
<p align="right" style="color: blue">'''{{CURRENTDAY}}/{{CURRENTMONTH}}/{{CURRENTYEAR}}'''</p>
{{Menu_Python_2}}
+
<font color=black>
 +
<br>
 
__NOTOC__
 
__NOTOC__
<font size=6 color=red><center>'''PYTHON programmation objet'''</center></font>
+
= <font size=6 color=red>'''PYTHON programmation objet'''</font> =
= Python =
+
== <font color=green>'''Les bases'''</font> ==
== Les bases ==
+
<div style="width:52%; height:600px; overflow:auto; border:solid 1px black;">
 
<center>
 
<center>
 
<table>
 
<table>
 
<tr>
 
<tr>
 
<td >{{Video_3}}</td>
 
<td >{{Video_3}}</td>
<td ><youtube>HPM2ZAxKVlU</youtube></td>
+
<td >{{#widget:YouTube|id=HPM2ZAxKVlU}}</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
 
</center>
 
</center>
=== Les variables par l'exemple ===
+
=== <font color=Magenta>'''Les variables par l'exemple'''</font> ===
==== Exemple 1 ====
 
 
* Affectons une valeur à la variable age  
 
* Affectons une valeur à la variable age  
 
<syntaxhighlight lang="python" line='line'>
 
<syntaxhighlight lang="python" line='line'>
Ligne 22 : Ligne 22 :
 
30
 
30
 
</syntaxhighlight>
 
</syntaxhighlight>
 
==== Exemple 2 ====
 
 
* On va ensuite ajouter 10 à la valeur de cette variable
 
* On va ensuite ajouter 10 à la valeur de cette variable
 
<syntaxhighlight lang="python" line='line'>
 
<syntaxhighlight lang="python" line='line'>
Ligne 31 : Ligne 29 :
 
40
 
40
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
* Il est possible de mettre une variable dans une autre variable.
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> age = 30
 +
>>> age2 = age
 +
>>> age2
 +
30
 +
</syntaxhighlight>
 +
* On peut mettre à peu près tout ce qu'on veut dans la variable, y compris du texte:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> age = "J'ai 30 ans"
 +
>>> age
 +
"J'ai 30 ans"
 +
</syntaxhighlight>
 +
* Il est possible de concaténer, c'est à dire d'ajouter du texte à du texte:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> age = age + " et je suis encore jeune!"
 +
>>> age
 +
"J'ai 30 ans et je suis encore jeune!"
 +
</syntaxhighlight>
 +
*  On peut même multiplier une chaine de caractères.
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> age = "jeune"
 +
>>> age * 3
 +
'jeunejeunejeune'
 +
</syntaxhighlight>
 +
* Evidemment, si on essaie de faire des additions avec des variables qui sont des chiffres et d'autres qui sont du texte, l'interpréteur va hurler
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> age = "J'ai 30 ans"
 +
>>> age
 +
"J'ai 30 ans"
 +
>>> age + 1
 +
Traceback (most recent call last):
 +
  File "<stdin>", line 1, in <module>
 +
TypeError: cannot concatenate 'str' and 'int' objects
 +
</syntaxhighlight>
 +
* On remarquera que l'interpréteur est sympa puisqu'il dit ce qui ne va pas: Il ne peut pas concaténer str et int .
 +
</div>
  
== Les listes ==
+
== <font color=green>'''Les listes'''</font> ==
 +
<div style="width:52%; height:600px; overflow:auto; border:solid 1px black;">
 
<center>
 
<center>
 
<table>
 
<table>
 
<tr>
 
<tr>
 
<td >{{Video_4}}</td>
 
<td >{{Video_4}}</td>
<td ><youtube>J3RJE8516MU</youtube></td>
+
<td >{{#widget:YouTube|id=J3RJE8516MU}}</td>
 +
</tr>
 +
</table>
 +
</center>
 +
* Les listes (ou list / array ) en python sont une variable dans laquelle on peut mettre plusieurs variables.
 +
=== <font color=Magenta>'''Créer une liste en python'''</font> ===
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = []
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Voir le contenu de la liste en l'appelant'''</font> ===
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste
 +
<type 'list'>
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Ajouter une valeur à une liste python'''</font> ===
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = [1,2,3]
 +
>>> liste
 +
[1, 2, 3]
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Ajouter après la création de la liste'''</font> ===
 +
<font color=green size=4>méthode append</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = []
 +
>>> liste
 +
[]
 +
>>> liste.append(1)
 +
>>> liste
 +
[1]
 +
>>> liste.append("ok")
 +
>>> liste
 +
[1, 'ok']
 +
</syntaxhighlight>
 +
* Il est possible de mélanger dans une même liste des variables de type différent. On peut d'ailleurs mettre une liste dans une liste.
 +
=== <font color=Magenta>'''Afficher un item d'une liste'''</font> ===
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = ["a","d","m"]
 +
>>> liste[0]
 +
'a'
 +
>>> liste[2]
 +
'm'
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Modifier une valeur avec son index'''</font> ===
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = ["a","d","m"]
 +
>>> liste[0]
 +
'a'
 +
>>> liste[2]
 +
'm'
 +
>>> liste[2] = "z"
 +
>>> liste
 +
['a', 'd', 'z']
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Supprimer une entrée avec un index'''</font> ===
 +
<font color=red size=4>Fonction del</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = ["a", "b", "c"]
 +
>>> del liste[1]
 +
>>> liste
 +
['a', 'c']
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Supprimer une entrée avec sa valeur'''</font> ===
 +
<font color=green size=4>Méthode remove</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = ["a", "b", "c"]
 +
>>> liste.remove("a")
 +
>>> liste
 +
['b', 'c']
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Inverser les valeurs d'une liste'''</font> ===
 +
* Inverser les items d'une liste
 +
<font color=green size=4>méthode reverse</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = ["a", "b", "c"]
 +
>>> liste.reverse()
 +
>>> liste
 +
['c', 'b', 'a']
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Compter le nombre d'items d'une liste'''</font> ===
 +
* Il est possible de compter le nombre d'items d'une liste avec la fonction len .
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = [1,2,3,5,10]
 +
>>> len(liste)
 +
5
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Compter le nombre d'occurences d'une valeur'''</font> ===
 +
<font color=green size=4>Méthode count</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = ["a","a","a","b","c","c"]
 +
>>> liste.count("a")
 +
3
 +
>>> liste.count("c")
 +
2
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Trouver l'index d'une valeur'''</font> ===
 +
<font color=green size=4>méthode index</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = ["a","a","a","b","c","c"]
 +
>>> liste.index("b")
 +
3
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Manipuler une liste'''</font> ===
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = [1, 10, 100, 250, 500]
 +
>>> liste[0]
 +
1
 +
>>> liste[-1] # Cherche la dernière occurence
 +
500
 +
>>> liste[-4:] # Affiche les 4 dernières occurrences
 +
[500, 250, 100, 10]
 +
>>> liste[:] # Affiche toutes les occurences
 +
[1, 10, 100, 250, 500]
 +
>>> liste[2:4] = [69, 70]
 +
[1, 10, 69, 70, 500]
 +
>>> liste[:] = [] # vide la liste
 +
[]
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Boucler sur une liste'''</font> ===
 +
* Pour afficher les valeurs d'une liste, on peut utiliser une boucle:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = ["a","d","m"]
 +
>>> for lettre in liste:
 +
...    print lettre
 +
...
 +
a
 +
d
 +
m
 +
</syntaxhighlight>
 +
* Pour récupérer l'index, utiliser la fonction enumerate .
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> for lettre in enumerate(liste):
 +
...    print lettre
 +
...
 +
(0, 'a')
 +
(1, 'd')
 +
(2, 'm')
 +
</syntaxhighlight>
 +
'''Les valeurs retournées par la boucle sont des tuples.'''
 +
=== <font color=Magenta>'''Copier une liste'''</font> ===
 +
* Beaucoup de débutants font l'erreur de copier une liste de cette manière:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> x = [1,2,3]
 +
>>> y = x
 +
</syntaxhighlight>
 +
* Or si on change une valeur de la liste y , la liste x sera elle aussi affectée par cette modification:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> x = [1,2,3]
 +
>>> y = x
 +
>>> y[0] = 4
 +
>>> x
 +
[4, 2, 3]
 +
</syntaxhighlight>
 +
* En fait cette syntaxe permet de travailler sur un même élément nommé différemment
 +
* Alors comment copier une liste qui sera indépendante?
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> x = [1,2,3]
 +
>>> y = x[:]
 +
>>> y[0] = 9
 +
>>> x
 +
[1, 2, 3]
 +
>>> y
 +
[9, 2, 3]
 +
</syntaxhighlight>
 +
* Pour des données plus complexes, utiliser la <font color=red size=4>fonction deepcopy</font> du module copy
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> import copy
 +
>>> x = [[1,2], 2]
 +
>>> y = copy.deepcopy(x)
 +
>>> y[1] = [1,2,3]
 +
>>> x
 +
[[1, 2], 2]
 +
>>> y
 +
[[1, 2], [1, 2, 3]]
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Transformer une string en liste'''</font> ===
 +
* Transformer une chaine de caractère en liste.
 +
<font color=green size=4>Méthode split</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> ma_chaine = "Olivier:ENGEL:Strasbourg"
 +
>>> ma_chaine.split(":")
 +
['Olivier', 'ENGEL', 'Strasbourg']
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Transformer une liste en string'''</font> ===
 +
<font color=green size=4>Méthode " join "</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = ["Olivier","ENGEL","Strasbourg"]
 +
>>> ":".join(liste)
 +
'Olivier:ENGEL:Strasbourg'
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Trouver un item dans une liste'''</font> ===
 +
* Pour savoir si un élément est dans une liste, utiliser le mot clé in de cette manière:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = [1,2,3,5,10]
 +
>>> 3 in liste
 +
True
 +
>>> 11 in liste
 +
False
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''La fonction range'''</font> ===
 +
* La <font color=red size=4>fonction range</font> génère une liste composée d'une simple suite arithmétique.
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> range(10)
 +
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Agrandir une liste par une liste'''</font> ===
 +
* Pour mettre bout à bout deux listes, utiliser la <font color=green size=4>méthode extend</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> x = [1, 2, 3, 4]
 +
>>> y = [4, 5, 1, 0]
 +
>>> x.extend(y)
 +
>>> print x
 +
[1, 2, 3, 4, 4, 5, 1, 0]
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Permutations'''</font> ===
 +
* La permutation d'un ensemble d'éléments est une liste de tous les cas possibles.
 +
* Si on besoin de cette fonctionnalité, inutile de réinventer la roue, itertools
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> from itertools import permutations
 +
>>> list(permutations(['a', 'b', 'c']))
 +
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Permutation d'une liste de liste'''</font> ===
 +
* Afficher tous les cas possibles d'une liste elle-même composée de liste?
 +
* Outil product de itertools :
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> from itertools import product
 +
>>> list(product(['a', 'b'], ['c', 'd']))
 +
[('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')]
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Astuces'''</font> ===
 +
* Afficher les 2 premiers éléments d'une liste
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = [1,2,3,4,5]
 +
>>> liste[:2]
 +
[1, 2]
 +
</syntaxhighlight>
 +
* Afficher le dernier item d'une liste:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = [1, 2, 3, 4, 5, 6]
 +
>>> liste[-1]
 +
6
 +
</syntaxhighlight>
 +
* Afficher le 3ème élément en partant de la fin:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = [1, 2, 3, 4, 5, 6]
 +
>>> liste[-3]
 +
4
 +
</syntaxhighlight>
 +
* Afficher les 3 derniers éléments d'une liste:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> liste = [1, 2, 3, 4, 5, 6]
 +
>>> liste[-3:]
 +
[4, 5, 6]
 +
</syntaxhighlight>
 +
* Additionner deux listes pour les combiner ensemble en utilisant l'opérateur + :
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> x = [1, 2, 3]
 +
>>> y = [4, 5, 6]
 +
>>> x + y
 +
[1, 2, 3, 4, 5, 6]
 +
</syntaxhighlight>
 +
* Mutiplier une liste:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> x = [1, 2]
 +
>>> x*5
 +
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
 +
</syntaxhighlight>
 +
* Utile pour initialiser une liste:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> [0] * 5
 +
[0, 0, 0, 0, 0]
 +
</syntaxhighlight>
 +
 
 +
=== <font color=Magenta>'''Méthodes de manipulation de listes'''</font> ===
 +
<div style="width:80%; height:600px; overflow:auto; border:solid 1px black;">
 +
==== Ajouter, Supprimer, trier ====
 +
<center>
 +
<table>
 +
<tr>
 +
<td >{{Video_6}}</td>
 +
<td >{{#widget:YouTube|id=h_s6ctXNPJ0}}</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
 +
</center>
 +
</div>
 +
</div>
 +
 +
== <font color=green>'''Les Tuples'''</font> ==
 +
<div style="width:52%; height:600px; overflow:auto; border:solid 1px black;">
 +
* Un tuple est une liste qui ne peut plus être modifiée.
 +
=== <font color=Magenta>'''Créer un tuple'''</font> ===
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> mon_tuple = ()
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Ajouter une valeur à un tuple'''</font> ===
 +
* Créer un tuple avec des valeurs
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> mon_tuple = (1, "ok", "olivier")
 +
</syntaxhighlight>
 +
* Les parenthèses ne sont pas obligatoires mais facilite la lisibilité du code (rappelons que la force de python est sa simplicité de lecture):
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> mon_tuple = 1, 2, 3
 +
>>> type(mon_tuple)
 +
<type 'tuple'>
 +
</syntaxhighlight>
 +
* Lorsqu'on créé un tuple avec une seule valeur, ne pas oublier d'y ajouter une virgule, sinon ce n'est pas un tuple.
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> mon_tuple = ("ok")
 +
>>> type(mon_tuple)
 +
<type 'str'>
 +
>>> mon_tuple = ("ok",)
 +
>>> type(mon_tuple)
 +
<type 'tuple'>
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Afficher une valeur d'un tuple'''</font> ===
 +
* Le tuple est une sorte de liste, on peut donc utiliser la même syntaxe pour lire les données du tuple.
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> mon_tuple[0]
 +
1
 +
</syntaxhighlight>
 +
* Et évidemment si on essaie de changer la valeur d'un index, l'interpreteur nous insulte copieusement:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> mon_tuple[1] = "ok"
 +
Traceback (most recent call last):
 +
  File "<stdin>", line 1, in <module>
 +
TypeError: 'tuple' object does not support item assignment
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''A quoi sert un tuple alors?'''</font> ===
 +
* Le tuple permet une affectation multiple:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> v1, v2 = 11, 22
 +
>>> v1
 +
11
 +
>>> v2
 +
22
 +
</syntaxhighlight>
 +
* Il permet également de renvoyer plusieurs valeurs lors d'un appel d'une fonction:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def donne_moi_ton_nom():
 +
...    return "olivier", "engel"
 +
...
 +
>>> donne_moi_ton_nom()
 +
('olivier', 'engel')
 +
</syntaxhighlight>
 +
* On utilisera un tuple pour définir des sortes de constantes qui n'ont donc pas vocation à changer.
 +
</div>
 +
 +
== <font color=green>'''Les Dictionnaires'''</font> ==
 +
<div style="width:52%; height:600px; overflow:auto; border:solid 1px black;">
 +
* Un dictionnaire en python est une sorte de liste mais au lieu d'utiliser des index , on utilise des clés alphanumériques.
 +
=== <font color=Magenta>'''Créer un dictionnaire python'''</font> ===
 +
* Initialiser un dictionnaire:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> a = {}
 +
</syntaxhighlight>
 +
* ou
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> a = dict()
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Ajouter des valeurs dans un dictionnaire python'''</font> ===
 +
* Il faut indiquer une clé ainsi qu'une valeur:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> a = {}
 +
>>> a["nom"] = "Wayne"
 +
>>> a["prenom"] = "Bruce"
 +
>>> a
 +
{'nom': 'Wayne', 'prenom': 'Bruce'}
 +
</syntaxhighlight>
 +
* On peut utiliser des clés numériques comme dans la logique des listes .
 +
* Comment récupérer une valeur dans un dictionnaire python?
 +
* La <font color=green size=4>méthode get</font>  permet de récupérer une valeur dans un dictionnaire et si la clé est introuvable, on peut donner une valeur à retourner par défaut:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> data = {"name": "Wayne", "age": 45}
 +
>>> data.get("name")
 +
'Wayne'
 +
>>> data.get("adresse", "Adresse inconnue")
 +
'Adresse inconnue'
 +
</syntaxhighlight>
 +
 +
=== <font color=Magenta>'''Vérifier la présence d'une clé dans un dictionnaire python'''</font> ===
 +
* Utiliser la <font color=green size=4>méthode haskey</font> pour vérifier la présence d'une clé
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> a.has_key("nom")
 +
True
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Supprimer une entrée dans un dictionnaire python'''</font> ===
 +
* Il est possible de supprimer une entrée en indiquant sa clé, comme pour les listes:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> del a["nom"]
 +
>>> a
 +
{'prenom': 'Bruce'}
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Récupérer les clés d'un dictionnaire python par une boucle'''</font> ===
 +
* Pour récupérer les clés on utilise la <font color=green size=4>méthode keys</font> .
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> fiche = {"nom":"Wayne", "prenom":"Bruce"}
 +
>>> for cle in fiche.keys():
 +
...    print cle
 +
...
 +
nom
 +
prenom
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Récupérer les valeurs d'un dictionnaire python par une boucle'''</font> ===
 +
* <font color=green size=4>Méthode values</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> fiche = {"nom":"Wayne", "prenom":"Bruce"}
 +
>>> for valeur in fiche.values():
 +
...    print valeur
 +
...
 +
Wayne
 +
Bruce
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Récupérer les clés et les valeurs d'un dictionnaire python par une boucle'''</font> ===
 +
* Pour récupérer les clés et les valeurs en même temps, on utilise la <font color=green size=4>méthode items</font> qui retourne un tuple .
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> fiche = {"nom":"Wayne","prenom":"Bruce"}
 +
>>> for cle,valeur in fiche.items():
 +
...    print cle, valeur
 +
...
 +
nom Wayne
 +
prenom Bruce
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Utiliser des tuples comme clé dans un dictionnaire python'''</font> ===
 +
* Une des forces de python est la combinaison tuple/dictionnaire qui fait des merveilles dans certains cas comme lors de l'utilisation de coordonnées.
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> b = {}
 +
>>> b[(32)]=12
 +
>>> b[(45)]=13
 +
>>> b
 +
{(4, 5): 13, (3, 2): 12}
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Créer une copie indépendante d'un dictionnaire python'''</font> ===
 +
* Comme pour toute variable, on ne peut pas copier un dictionnaire en faisant dic1 = dic2
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> d = {"k1":"Bruce", "k2":"Wayne"}
 +
>>> e = d
 +
>>> d["k1"] = "XXX"
 +
>>> e
 +
{'k2': 'Wayne', 'k1': 'XXX'}
 +
</syntaxhighlight>
 +
* Pour créer une copie indépendante, on peut utiliser la <font color=green size=4>méthode copy</font>
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> d = {"k1":"Bruce", "k2":"Wayne"}
 +
>>> e = d.copy()
 +
>>> d["k1"] = "XXX"
 +
>>> e
 +
{'k2': 'Wayne', 'k1': 'Bruce'}
 +
</syntaxhighlight>
 +
=== <font color=Magenta>'''Fusionner des dictionnaires python'''</font> ===
 +
* La <font color=green size=4>méthode update</font> permet de fusionner deux dictionaires .
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> a = {'nom': 'Wayne'}
 +
>>> b = {'prenom': 'bruce'}
 +
>>> a.update(b)
 +
>>> print(a)
 +
{'nom': 'Wayne', 'prenom': 'Bruce'}
 +
</syntaxhighlight>
 +
</div>
 +
 +
== <font color=green>'''Fonctions et Méthodes'''</font> ==
 +
<div style="width:50%; height:600px; overflow:auto; border:solid 1px black;">
 +
<center>
 +
<table>
 +
<tr>
 +
<td >{{Video_5}}</td>
 +
<td >{{#widget:YouTube|id=u3u0BxbzLFw}}</td>
 +
</tr>
 +
</table>
 +
</center>
 +
=== <font color=Magenta>'''Les fonctions'''</font> ===
 +
* Une fonction (ou function ) est une suite d'instructions que l'on peut appeler avec un nom.
 +
==== Première fonction ====
 +
* Créons une fonction qui nous retournera un âge:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def indique_mon_age():
 +
...    return 30;
 +
...
 +
>>> indique_mon_age()
 +
30
 +
</syntaxhighlight>
 +
* On ne peut pas copier coller ce code, on doit entrer chaque ligne à la main et appuyer sur entrée pour retourner à la ligne. Les 3 chevrons et les 3 points sont affichés par l'interpréteur python.
 +
* Tout d'abord pour indiquer à l'interpréteur qu'on veut créer une fonction , on utilisera le mot clé def suivi d'un nom puis de parenthèses et ensuite d'un double point.
 +
* On remarque également qu'il y a un espace entre les 3 points et le mot clé "return", il s'agit d'une indentation , c'est à dire un espace qui améliore non seulement la lecture de la fonction mais qui indique que nous sommes toujours dans la fonction. Lorsque l'action demandée n'est plus dans la fonction, il ne faut plus indenter le texte. Pour indenter du texte, on doit appuyer sur la touche TAB du clavier -ou dans d'autres cas créer 4 espaces manuellement-.
 +
==== Les paramètres ====
 +
* Créons une autre fonction:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def augmente_moi(a):
 +
...    return augmente_moi + 2
 +
...
 +
>>> augmente_moi(1)
 +
3
 +
</syntaxhighlight>
 +
* Cette fonction incrémente de 2 une valeur que l'on passe en paramètre.
 +
* Il est d'ailleurs possible d'utiliser plusieurs paramètres:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def augmente_moi(a, b):
 +
...    return 30 + a + b
 +
...
 +
>>> augmente_moi(1, 2)
 +
33
 +
</syntaxhighlight>
 +
* Un paramètre est obligatoire
 +
* Lorsqu'on indique des paramètres à une fonction, ces derniers doivent impérativement être renseignés sans quoi une erreur apparaîtra.
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def augmente_moi(a, b):
 +
...    return 30 + a + b
 +
...
 +
>>> augmente_moi(1)
 +
Traceback (most recent call last):
 +
  File "<stdin>", line 1, in <module>
 +
TypeError: augmente_moi() takes exactly 2 arguments (1 given)
 +
</syntaxhighlight>
 +
* <font color=Magenta size=4>L'opérateur splat</font> : * est très souvent utilisé en python.
 +
def ma_function(*var)
 +
def ma_function(**var)
 +
ma_function(*var)
 +
ma_function(**var)
 +
* Une liste en paramètre
 +
* On peut récupérer les valeurs renseignées via une liste:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def augmente_moi(*param):
 +
...    return param[0] + param[1] + param[2]
 +
...
 +
>>> augmente_moi(1, 2, 3)
 +
6
 +
>>> augmente_moi(10, 20, 30)
 +
60
 +
</syntaxhighlight>
 +
* Rendre obligatoire uniquement certains paramètres avec une liste.
 +
* Si on désire rendre obligatoire uniquement certains paramètres, utiliser la syntaxe suivante:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def ma_fiche(prenom, nom, *reste):
 +
...    return prenom + " " + nom
 +
...
 +
>>> ma_fiche("olivier","engel")
 +
'olivier engel'
 +
</syntaxhighlight>
 +
* On remarque que le paramètre " reste " est précédé d'une étoile * .
 +
* Utiliser un dictionnaire pour les paramètres
 +
* On peut utiliser un dictionnaire en paramètres pour cela on doit ajouter une double étoile: **
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def ma_fiche(**parametres):
 +
...    return parametres["prenom"]
 +
...
 +
>>> ma_fiche(prenom="olivier")
 +
'olivier'
 +
</syntaxhighlight>
 +
 +
==== Utilisation de splat liste au niveau des appels de fonctions ====
 +
* Reprenons l'exemple de la fonction augmente_moi :
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def augmente_moi(*param):
 +
...    return param[0] + param[1] + param[2]
 +
...
 +
</syntaxhighlight>
 +
* Nous avons vu qu'il était possible de faire ceci:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> augmente_moi(1, 2, 3)
 +
6
 +
</syntaxhighlight>
 +
* L'utilisation de l'étoile permet de passer par une liste:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> data = [1, 2, 3]
 +
>>> augmente_moi(*data)
 +
6
 +
</syntaxhighlight>
 +
* Utilisation de splat dictionnaire au niveau des appels de fonctions.
 +
* Prenons l'exemple de cette fonction:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> def test(firstname="", lastname=""):
 +
...    return "{} {}" .format(firstname, lastname)
 +
</syntaxhighlight>
 +
* Créons notre dictionnaire:
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> data = {'firstname':'olivier', 'lastname':'engel'}
 +
</syntaxhighlight>
 +
* Et envoyons notre variable avec une étoile *
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> test(*data)
 +
'lastname firstname'
 +
</syntaxhighlight>
 +
* Puis avec deux étoiles **
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> test(**data)
 +
'olivier engel'
 +
</syntaxhighlight>
 +
 +
=== <font color=Magenta>'''Portée des variables (variable globale et variable locale)'''</font> ===
 +
Une variable déclarée à la racine d'un module est visible dans tout ce module. On parle alors de variable globale .
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> x = "hello"
 +
>>> def test():
 +
...    print x
 +
...
 +
>>> test()
 +
hello
 +
</syntaxhighlight>
 +
Et une variable déclarée dans une fonction ne sera visible que dans cette fonction. On parle alors de variable locale .
 +
<syntaxhighlight lang="python" line='line'>
 +
>>> x = False
 +
>>> def test():
 +
...    x = "hello"
 +
...
 +
>>> test()
 +
>>> x
 +
False
 +
</syntaxhighlight>
 +
 +
== <font color=green>'''Les fonctions natives'''</font> ==
 +
<center>
 +
{{Python_natif}}
 
</center>
 
</center>
  
== test ==
+
== <font color=green>'''Procédure et fonctions'''</font> ==
== toto ==
+
* Une fonction n'est pas obligée de renvoyer une valeur, on parlera alors dans ce cas plutôt de procédure .
===titi===
+
</div>

Version actuelle datée du 12 novembre 2020 à 16:01

Array
Ft.png
(Opérateurs:Magenta)
(Méthodes:Green)
(Fonctions:Red)

4/02/2026


PYTHON programmation objet

Les bases

  • Affectation des variables
  • Fonctions informatiques
  • Entrées/Affichage <raw_input>
  • <print> <int> <float> <str>
  • Ecrire un programme avec IDLE
  • Codage des caractères UTF8

Les variables par l'exemple

  • Affectons une valeur à la variable age
1 >>> age = 30
2 >>> age
3 30
  • On va ensuite ajouter 10 à la valeur de cette variable
1 >>> age = 30
2 >>> age = age + 10
3 >>> age
4 40
  • Il est possible de mettre une variable dans une autre variable.
1 >>> age = 30
2 >>> age2 = age
3 >>> age2
4 30
  • On peut mettre à peu près tout ce qu'on veut dans la variable, y compris du texte:
1 >>> age = "J'ai 30 ans"
2 >>> age
3 "J'ai 30 ans"
  • Il est possible de concaténer, c'est à dire d'ajouter du texte à du texte:
1 >>> age = age + " et je suis encore jeune!"
2 >>> age
3 "J'ai 30 ans et je suis encore jeune!"
  • On peut même multiplier une chaine de caractères.
1 >>> age = "jeune"
2 >>> age * 3
3 'jeunejeunejeune'
  • Evidemment, si on essaie de faire des additions avec des variables qui sont des chiffres et d'autres qui sont du texte, l'interpréteur va hurler
1 >>> age = "J'ai 30 ans"
2 >>> age
3 "J'ai 30 ans"
4 >>> age + 1
5 Traceback (most recent call last):
6   File "<stdin>", line 1, in <module>
7 TypeError: cannot concatenate 'str' and 'int' objects
  • On remarquera que l'interpréteur est sympa puisqu'il dit ce qui ne va pas: Il ne peut pas concaténer str et int .

Les listes

  • listes []
  • Modification des listes
  • Affichage d'une liste
  • boucle for avec une liste
  • Les listes (ou list / array ) en python sont une variable dans laquelle on peut mettre plusieurs variables.

Créer une liste en python

1  >>> liste = []

Voir le contenu de la liste en l'appelant

1  >>> liste
2  <type 'list'>

Ajouter une valeur à une liste python

1  >>> liste = [1,2,3]
2  >>> liste
3  [1, 2, 3]

Ajouter après la création de la liste

méthode append

1  >>> liste = []
2  >>> liste
3  []
4  >>> liste.append(1)
5  >>> liste
6  [1]
7  >>> liste.append("ok")
8  >>> liste
9  [1, 'ok']
  • Il est possible de mélanger dans une même liste des variables de type différent. On peut d'ailleurs mettre une liste dans une liste.

Afficher un item d'une liste

1  >>> liste = ["a","d","m"]
2  >>> liste[0]
3  'a'
4  >>> liste[2]
5  'm'

Modifier une valeur avec son index

1  >>> liste = ["a","d","m"]
2  >>> liste[0]
3  'a'
4  >>> liste[2]
5  'm'
6  >>> liste[2] = "z"
7  >>> liste
8  ['a', 'd', 'z']

Supprimer une entrée avec un index

Fonction del

1  >>> liste = ["a", "b", "c"]
2  >>> del liste[1]
3  >>> liste
4  ['a', 'c']

Supprimer une entrée avec sa valeur

Méthode remove

1  >>> liste = ["a", "b", "c"]
2  >>> liste.remove("a")
3  >>> liste
4  ['b', 'c']

Inverser les valeurs d'une liste

  • Inverser les items d'une liste

méthode reverse

1  >>> liste = ["a", "b", "c"]
2  >>> liste.reverse()
3  >>> liste
4  ['c', 'b', 'a']

Compter le nombre d'items d'une liste

  • Il est possible de compter le nombre d'items d'une liste avec la fonction len .
1  >>> liste = [1,2,3,5,10]
2  >>> len(liste)
3  5

Compter le nombre d'occurences d'une valeur

Méthode count

1  >>> liste = ["a","a","a","b","c","c"]
2  >>> liste.count("a")
3  3
4  >>> liste.count("c")
5  2

Trouver l'index d'une valeur

méthode index

1  >>> liste = ["a","a","a","b","c","c"]
2  >>> liste.index("b")
3  3

Manipuler une liste

 1  >>> liste = [1, 10, 100, 250, 500]
 2  >>> liste[0]
 3  1
 4  >>> liste[-1] # Cherche la dernière occurence
 5  500
 6  >>> liste[-4:] # Affiche les 4 dernières occurrences
 7  [500, 250, 100, 10]
 8  >>> liste[:] # Affiche toutes les occurences
 9  [1, 10, 100, 250, 500]
10  >>> liste[2:4] = [69, 70]
11  [1, 10, 69, 70, 500]
12  >>> liste[:] = [] # vide la liste
13  []

Boucler sur une liste

  • Pour afficher les valeurs d'une liste, on peut utiliser une boucle:
1  >>> liste = ["a","d","m"]
2  >>> for lettre in liste:
3  ...     print lettre
4  ... 
5  a
6  d
7  m
  • Pour récupérer l'index, utiliser la fonction enumerate .
1  >>> for lettre in enumerate(liste):
2  ...     print lettre
3  ... 
4  (0, 'a')
5  (1, 'd')
6  (2, 'm')

Les valeurs retournées par la boucle sont des tuples.

Copier une liste

  • Beaucoup de débutants font l'erreur de copier une liste de cette manière:
1  >>> x = [1,2,3]
2  >>> y = x
  • Or si on change une valeur de la liste y , la liste x sera elle aussi affectée par cette modification:
1  >>> x = [1,2,3]
2  >>> y = x
3  >>> y[0] = 4
4  >>> x
5  [4, 2, 3]
  • En fait cette syntaxe permet de travailler sur un même élément nommé différemment
  • Alors comment copier une liste qui sera indépendante?
1  >>> x = [1,2,3]
2  >>> y = x[:]
3  >>> y[0] = 9
4  >>> x
5  [1, 2, 3]
6  >>> y
7  [9, 2, 3]
  • Pour des données plus complexes, utiliser la fonction deepcopy du module copy
1  >>> import copy
2  >>> x = [[1,2], 2]
3  >>> y = copy.deepcopy(x)
4  >>> y[1] = [1,2,3]
5  >>> x
6  [[1, 2], 2]
7  >>> y
8  [[1, 2], [1, 2, 3]]

Transformer une string en liste

  • Transformer une chaine de caractère en liste.

Méthode split

1  >>> ma_chaine = "Olivier:ENGEL:Strasbourg"
2  >>> ma_chaine.split(":")
3  ['Olivier', 'ENGEL', 'Strasbourg']

Transformer une liste en string

Méthode " join "

1  >>> liste = ["Olivier","ENGEL","Strasbourg"]
2  >>> ":".join(liste)
3  'Olivier:ENGEL:Strasbourg'

Trouver un item dans une liste

  • Pour savoir si un élément est dans une liste, utiliser le mot clé in de cette manière:
1  >>> liste = [1,2,3,5,10]
2  >>> 3 in liste
3  True
4  >>> 11 in liste
5  False

La fonction range

  • La fonction range génère une liste composée d'une simple suite arithmétique.
1  >>> range(10)
2  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Agrandir une liste par une liste

  • Pour mettre bout à bout deux listes, utiliser la méthode extend
1  >>> x = [1, 2, 3, 4]
2  >>> y = [4, 5, 1, 0]
3  >>> x.extend(y)
4  >>> print x
5  [1, 2, 3, 4, 4, 5, 1, 0]

Permutations

  • La permutation d'un ensemble d'éléments est une liste de tous les cas possibles.
  • Si on besoin de cette fonctionnalité, inutile de réinventer la roue, itertools
1  >>> from itertools import permutations
2  >>> list(permutations(['a', 'b', 'c']))
3  [('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Permutation d'une liste de liste

  • Afficher tous les cas possibles d'une liste elle-même composée de liste?
  • Outil product de itertools :
1  >>> from itertools import product
2  >>> list(product(['a', 'b'], ['c', 'd']))
3  [('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')]

Astuces

  • Afficher les 2 premiers éléments d'une liste
1  >>> liste = [1,2,3,4,5]
2  >>> liste[:2]
3  [1, 2]
  • Afficher le dernier item d'une liste:
1  >>> liste = [1, 2, 3, 4, 5, 6]
2  >>> liste[-1]
3  6
  • Afficher le 3ème élément en partant de la fin:
1  >>> liste = [1, 2, 3, 4, 5, 6]
2  >>> liste[-3]
3  4
  • Afficher les 3 derniers éléments d'une liste:
1  >>> liste = [1, 2, 3, 4, 5, 6]
2  >>> liste[-3:]
3  [4, 5, 6]
  • Additionner deux listes pour les combiner ensemble en utilisant l'opérateur + :
1  >>> x = [1, 2, 3]
2  >>> y = [4, 5, 6]
3  >>> x + y
4  [1, 2, 3, 4, 5, 6]
  • Mutiplier une liste:
1  >>> x = [1, 2]
2  >>> x*5
3  [1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
  • Utile pour initialiser une liste:
1  >>> [0] * 5
2  [0, 0, 0, 0, 0]

Méthodes de manipulation de listes

Ajouter, Supprimer, trier

  • enlever un élément d'une liste, méthode remove
  • ajouter un élément à une liste, méthode append
  • trier une liste, méthode sort
  • Méfiance avec les accents
  • Formule caractère outre-Atlantique
  • For // in
  • Comparateurs
  • Opérateurs Booléens

Les Tuples

  • Un tuple est une liste qui ne peut plus être modifiée.

Créer un tuple

1  >>> mon_tuple = ()

Ajouter une valeur à un tuple

  • Créer un tuple avec des valeurs
1  >>> mon_tuple = (1, "ok", "olivier")
  • Les parenthèses ne sont pas obligatoires mais facilite la lisibilité du code (rappelons que la force de python est sa simplicité de lecture):
1  >>> mon_tuple = 1, 2, 3
2  >>> type(mon_tuple)
3  <type 'tuple'>
  • Lorsqu'on créé un tuple avec une seule valeur, ne pas oublier d'y ajouter une virgule, sinon ce n'est pas un tuple.
1  >>> mon_tuple = ("ok")
2  >>> type(mon_tuple)
3  <type 'str'>
4  >>> mon_tuple = ("ok",)
5  >>> type(mon_tuple)
6  <type 'tuple'>

Afficher une valeur d'un tuple

  • Le tuple est une sorte de liste, on peut donc utiliser la même syntaxe pour lire les données du tuple.
1  >>> mon_tuple[0]
2  1
  • Et évidemment si on essaie de changer la valeur d'un index, l'interpreteur nous insulte copieusement:
1  >>> mon_tuple[1] = "ok"
2  Traceback (most recent call last):
3   File "<stdin>", line 1, in <module>
4  TypeError: 'tuple' object does not support item assignment

A quoi sert un tuple alors?

  • Le tuple permet une affectation multiple:
1  >>> v1, v2 = 11, 22
2  >>> v1
3  11
4  >>> v2
5  22
  • Il permet également de renvoyer plusieurs valeurs lors d'un appel d'une fonction:
1  >>> def donne_moi_ton_nom():
2  ...     return "olivier", "engel"
3  ... 
4  >>> donne_moi_ton_nom()
5  ('olivier', 'engel')
  • On utilisera un tuple pour définir des sortes de constantes qui n'ont donc pas vocation à changer.

Les Dictionnaires

  • Un dictionnaire en python est une sorte de liste mais au lieu d'utiliser des index , on utilise des clés alphanumériques.

Créer un dictionnaire python

  • Initialiser un dictionnaire:
1  >>> a = {}
  • ou
1  >>> a = dict()

Ajouter des valeurs dans un dictionnaire python

  • Il faut indiquer une clé ainsi qu'une valeur:
1  >>> a = {}
2  >>> a["nom"] = "Wayne"
3  >>> a["prenom"] = "Bruce"
4  >>> a
5  {'nom': 'Wayne', 'prenom': 'Bruce'}
  • On peut utiliser des clés numériques comme dans la logique des listes .
  • Comment récupérer une valeur dans un dictionnaire python?
  • La méthode get permet de récupérer une valeur dans un dictionnaire et si la clé est introuvable, on peut donner une valeur à retourner par défaut:
1  >>> data = {"name": "Wayne", "age": 45}
2  >>> data.get("name")
3  'Wayne'
4  >>> data.get("adresse", "Adresse inconnue")
5  'Adresse inconnue'

Vérifier la présence d'une clé dans un dictionnaire python

  • Utiliser la méthode haskey pour vérifier la présence d'une clé
1  >>> a.has_key("nom")
2  True

Supprimer une entrée dans un dictionnaire python

  • Il est possible de supprimer une entrée en indiquant sa clé, comme pour les listes:
1  >>> del a["nom"]
2  >>> a
3  {'prenom': 'Bruce'}

Récupérer les clés d'un dictionnaire python par une boucle

  • Pour récupérer les clés on utilise la méthode keys .
1  >>> fiche = {"nom":"Wayne", "prenom":"Bruce"}
2  >>> for cle in fiche.keys():
3  ...     print cle
4  ... 
5  nom
6  prenom

Récupérer les valeurs d'un dictionnaire python par une boucle

  • Méthode values
1  >>> fiche = {"nom":"Wayne", "prenom":"Bruce"}
2  >>> for valeur in fiche.values():
3  ...     print valeur
4  ... 
5  Wayne
6  Bruce

Récupérer les clés et les valeurs d'un dictionnaire python par une boucle

  • Pour récupérer les clés et les valeurs en même temps, on utilise la méthode items qui retourne un tuple .
1  >>> fiche = {"nom":"Wayne","prenom":"Bruce"}
2  >>> for cle,valeur in fiche.items():
3  ...     print cle, valeur
4  ... 
5  nom Wayne
6  prenom Bruce

Utiliser des tuples comme clé dans un dictionnaire python

  • Une des forces de python est la combinaison tuple/dictionnaire qui fait des merveilles dans certains cas comme lors de l'utilisation de coordonnées.
1  >>> b = {}
2  >>> b[(32)]=12
3  >>> b[(45)]=13
4  >>> b
5  {(4, 5): 13, (3, 2): 12}

Créer une copie indépendante d'un dictionnaire python

  • Comme pour toute variable, on ne peut pas copier un dictionnaire en faisant dic1 = dic2
1  >>> d = {"k1":"Bruce", "k2":"Wayne"}
2  >>> e = d
3  >>> d["k1"] = "XXX"
4  >>> e
5  {'k2': 'Wayne', 'k1': 'XXX'}
  • Pour créer une copie indépendante, on peut utiliser la méthode copy
1  >>> d = {"k1":"Bruce", "k2":"Wayne"}
2  >>> e = d.copy()
3  >>> d["k1"] = "XXX"
4  >>> e
5  {'k2': 'Wayne', 'k1': 'Bruce'}

Fusionner des dictionnaires python

  • La méthode update permet de fusionner deux dictionaires .
1  >>> a = {'nom': 'Wayne'}
2  >>> b = {'prenom': 'bruce'}
3  >>> a.update(b)
4  >>> print(a)
5  {'nom': 'Wayne', 'prenom': 'Bruce'}

Fonctions et Méthodes

Les fonctions: [ fonction(paramètres) ]

len(), str(), range()

Les méthodes: [ variable.méthode(paramètres) ]

  • les méthodes peuvent ne pas retourner de résultat
  • Méthode de texte:
    • upper
    • lower
    • capitalize
    • title
    • strip
    • split
  • Il est possible d'accumuler les méthodes

Les fonctions

  • Une fonction (ou function ) est une suite d'instructions que l'on peut appeler avec un nom.

Première fonction

  • Créons une fonction qui nous retournera un âge:
1  >>> def indique_mon_age():
2  ...     return 30;
3  ... 
4  >>> indique_mon_age()
5  30
  • On ne peut pas copier coller ce code, on doit entrer chaque ligne à la main et appuyer sur entrée pour retourner à la ligne. Les 3 chevrons et les 3 points sont affichés par l'interpréteur python.
  • Tout d'abord pour indiquer à l'interpréteur qu'on veut créer une fonction , on utilisera le mot clé def suivi d'un nom puis de parenthèses et ensuite d'un double point.
  • On remarque également qu'il y a un espace entre les 3 points et le mot clé "return", il s'agit d'une indentation , c'est à dire un espace qui améliore non seulement la lecture de la fonction mais qui indique que nous sommes toujours dans la fonction. Lorsque l'action demandée n'est plus dans la fonction, il ne faut plus indenter le texte. Pour indenter du texte, on doit appuyer sur la touche TAB du clavier -ou dans d'autres cas créer 4 espaces manuellement-.

Les paramètres

  • Créons une autre fonction:
1 >>> def augmente_moi(a):
2 ...     return augmente_moi + 2
3 ... 
4 >>> augmente_moi(1)
5 3
  • Cette fonction incrémente de 2 une valeur que l'on passe en paramètre.
  • Il est d'ailleurs possible d'utiliser plusieurs paramètres:
1  >>> def augmente_moi(a, b):
2  ...     return 30 + a + b
3  ... 
4  >>> augmente_moi(1, 2)
5  33
  • Un paramètre est obligatoire
  • Lorsqu'on indique des paramètres à une fonction, ces derniers doivent impérativement être renseignés sans quoi une erreur apparaîtra.
1  >>> def augmente_moi(a, b):
2  ...     return 30 + a + b
3  ...
4  >>> augmente_moi(1)
5  Traceback (most recent call last):
6   File "<stdin>", line 1, in <module>
7  TypeError: augmente_moi() takes exactly 2 arguments (1 given)
  • L'opérateur splat : * est très souvent utilisé en python.
def ma_function(*var)
def ma_function(**var)
ma_function(*var)
ma_function(**var)
  • Une liste en paramètre
  • On peut récupérer les valeurs renseignées via une liste:
1 >>> def augmente_moi(*param):
2 ...     return param[0] + param[1] + param[2]
3 ... 
4 >>> augmente_moi(1, 2, 3)
5 6
6 >>> augmente_moi(10, 20, 30)
7 60
  • Rendre obligatoire uniquement certains paramètres avec une liste.
  • Si on désire rendre obligatoire uniquement certains paramètres, utiliser la syntaxe suivante:
1 >>> def ma_fiche(prenom, nom, *reste):
2 ...     return prenom + " " + nom 
3 ... 
4 >>> ma_fiche("olivier","engel")
5 'olivier engel'
  • On remarque que le paramètre " reste " est précédé d'une étoile * .
  • Utiliser un dictionnaire pour les paramètres
  • On peut utiliser un dictionnaire en paramètres pour cela on doit ajouter une double étoile: **
1 >>> def ma_fiche(**parametres):
2 ...     return parametres["prenom"]
3 ...
4 >>> ma_fiche(prenom="olivier")
5 'olivier'

Utilisation de splat liste au niveau des appels de fonctions

  • Reprenons l'exemple de la fonction augmente_moi :
1 >>> def augmente_moi(*param):
2 ...     return param[0] + param[1] + param[2]
3 ...
  • Nous avons vu qu'il était possible de faire ceci:
1 >>> augmente_moi(1, 2, 3)
2 6
  • L'utilisation de l'étoile permet de passer par une liste:
1 >>> data = [1, 2, 3]
2 >>> augmente_moi(*data)
3 6
  • Utilisation de splat dictionnaire au niveau des appels de fonctions.
  • Prenons l'exemple de cette fonction:
1 >>> def test(firstname="", lastname=""):
2 ...     return "{} {}" .format(firstname, lastname)
  • Créons notre dictionnaire:
1 >>> data = {'firstname':'olivier', 'lastname':'engel'}
  • Et envoyons notre variable avec une étoile *
1 >>> test(*data)
2 'lastname firstname'
  • Puis avec deux étoiles **
1 >>> test(**data)
2 'olivier engel'

Portée des variables (variable globale et variable locale)

Une variable déclarée à la racine d'un module est visible dans tout ce module. On parle alors de variable globale .

1 >>> x = "hello"
2 >>> def test():
3 ...     print x
4 ... 
5 >>> test()
6 hello

Et une variable déclarée dans une fonction ne sera visible que dans cette fonction. On parle alors de variable locale .

1 >>> x = False
2 >>> def test():
3 ...     x = "hello"
4 ... 
5 >>> test()
6 >>> x
7 False

Les fonctions natives

abs
all
any
bin
callable
capitalize
choice
count
dir
endswith
eval
find
help
hex
isalnum
isalpha
isdigit
islower
isspace
istitle
isupper

join
len
locals
lower
map
max
randint
random
replace
reverse
round
shuffle
startswith
sort
sorted
split
splitlines
sum
title
upper
zip

  • Il existe des fonctions natives à python (ou builtin ).

abs(x)

  • Retourne une valeur absolue
1  >>> abs(-1)
2  1

all(iterable)

  • Retourne True si tous les éléments d'un élément itérable sont True
1  >>> liste = [True,True,True,1]
2  >>> all(liste)
3  True

any(iterable)

  • Retourne True si au moins un élément d'un élément itérable est True
1  >>> liste = [True,False, True]
2  >>> any(liste)
3  True

bin(x)

  • Convertit un integer en chaine de caractères binaires.
1  >>> bin(101)
2  '0b1100101'

callable(object)

  • Determine si un objet est callable .
1  >>> callable("A")
2  False
3  >>> callable(int)
4  True

str.capitalize()

  • La méthode capitalize permet de mettre une chaine de caractères au format Xxxxx
1  >>> "oLIviER".capitalize()
2  'Olivier'

choice([])

  • Retourne une valeur d'une liste aléatoirement.
1  >>> import random
2  >>> random.choice([1,2,3,4,5])
3  3
4  >>> random.choice([1,2,3,4,5])
5  2

str.count(string)

  • La méthode count compte le nombre d'occurences de la recherche demandée.
1  >>> "olivier".count("i")
2  2

dir(object)

  • Indique les noms de la structure de l'objet.
1  >>> dir(int)
2  ['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']

str.endswith(str)

  • La méthode endswith test si une chaine de caractères se termine par la chaine demandée
1  >>> a = "olivier"
2  >>> a.endswith("r")
3  True
4  >>> a.endswith("er")
5  True
6  >>> a.endswith("é")
7  False

eval(expression,globals=None,locals=None)

  • Execute une chaine de caractères.
1  >>> v = 101
2  >>> eval('v+1')
3  102

str.find(string)

  • La méthode find trouve la première occurence de la recherche demandée.
1  >>> "olivier".find("i")
2  2

help(element)

  • Cette fonction vous retourne des informations sur l'utilisation de l'élément qui nous intéresse.
 1  >>> help(int)
 2  Help on class int in module __builtin__:
 3  class int(object)
 4   |  int(x=0) -> int or long
 5   |  int(x, base=10) -> int or long
 6   |  
 7   |  Convert a number or string to an integer, or return 0 if no arguments
 8   |  are given.  If x is floating point, the conversion truncates towards zero.
 9   |  If x is outside the integer range, the function returns a long instead.
10   |  
11   |  If x is not a number or if base is given, then x must be a string or
12   |  Unicode object representing an integer literal in the given base.  The
13   |  literal can be preceded by '+' or '-' and be surrounded by whitespace.
14   |  The base defaults to 10.  Valid bases are 0 and 2-36.  Base 0 means to
15   |  interpret the base from the string as an integer literal.
16   |  >>> int('0b100', base=0)
17   |  4

hex

  • Convertit un nombre en valeur hexadécimale.
1  >>> hex(16)
2  '0x10'

str.isalnum()

  • Retoune True si tous les caractères sont alphanumériques et qu'il y a au moins un caractère. Sinon False.
 1  >>> "25".isalnum()
 2  True
 3  >>> "25b".isalnum()
 4  True
 5  >>> "25bé".isalnum()
 6  True
 7  >>> "25bé@".isalnum()
 8  False
 9  >>> "-".isalnum()
10  False
11  >>> "_".isalnum()
12  False
13  >>> "".isalnum()
14  False

str.isalpha()

  • Retourne True si tous les caractères sont des lettres et qu'il y a au moins un caractère. Sinon False
 1  >>> "x".isalpha()
 2  True
 3  >>> "-".isalpha()
 4  False
 5  >>> "12".isalpha()
 6  False
 7  >>> "jean-claude".isalpha()
 8  False
 9  >>> "jean claude".isalpha()
10  False
11  >>> "élise".isalpha()
12  True

str.isdigit()

  • Retourne True si tous les caractères sont numériques et qu'il y a au moins un caractère. Sinon False.
 1  >>> "1".isdigit()
 2  True
 3  >>> "1.5".isdigit()
 4  False
 5  >>> "1,5".isdigit()
 6  False
 7  >>> "3b".isdigit()
 8  False
 9  >>> " ".isdigit()
10  False

str.islower()

  • Retoune True si tous les caractères sont en minuscule.
1  >>> "olivier".islower()
2  True
3  >>> "Olivier".islower()
4  False

str.isspace()

  • Retoune True si il n'y a que des espaces et au moins un caractère.
1  >>> " ".isspace()
2  True
3  >>> "jean louis".isspace()
4  False
5  >>> "    ".isspace()
6  True

str.istitle()

  • Retourne True si la chaine a un format titre.
1  >>> "Titre".istitle()
2  True
3  >>> "TitrE".istitle()
4  False
5  >>> "Titre de mon site".istitle()
6  False
7  >>> "Titre De Mon Site".istitle()
8  True

str.isupper()

  • Retourne True si tous les caractères sont en majucule et qu'il y a au moins un caractère.
1  >>> "OLIVIER".isupper()
2  True
3  >>> "Olivier".isupper()
4  False
5  >>> "OlivieR".isupper()
6  False

str.join(liste)

  • La méthode join transforme une liste en chaine de caractères.
1  >>> ":".join(["olivier", "engel"])
2  'olivier:engel'

len(s)

  • Retourne le nombre d'items d'un objet.
1  >>> len([1,2,3])
2  3
3  >>> len("olivier")
4  7

locals()

  • Retourne un dictionnaire avec les valeurs des variables en cours.
1  >>> locals()
2  {'a': 12, '__builtins__': , '__package__': None, 'i': 20, 'v': 101, 'liste': [True, False, True], '__name__': '__main__', '__doc__': None}

str.lower()

  • La méthode lower permet de mettre en minuscule une chaine de caractères.
1  >>> "OLIVIER".lower()
2  'olivier'

map(function, [])

  • Execute une fonction sur chaque item d'un élément itérable.
1  >>> def add_one(x):
2  ...     return x + 1
3  ... 
4  >>> map(add_one, [1,2,3])
5  [2, 3, 4]

max() / min()

  • Retourne la valeur la plus élévée pour max() et la plus basse pour min()
1  >>> max([1,3,2,6,99,1])
2  99
3  >>> max(1,4,6,12,1)
4  12

randint()

  • Retourne un int aléatoire.
1  >>> import random
2  >>> random.randint(1,11)
3  5

random()

  • Retourne une valeur aléatoire.
1  >>> import random
2  >>> random.random()
3  0.9563522652738929

str.replace(string, string)

  • La méthode replace remplace un segment d'une chaine de caractères par une autre:
1  >>> "olivier".replace("i", "a")
2  'olavaer'

reverse()

  • La méthode reverse inverse l'ordre d'une liste.
1  >>> x = [1,4,7]
2  >>> x.reverse()
3  >>> x
4  [7, 4, 1]

reversed([])

  • Retourne un itérateur inversé.
1  >>> list(reversed([1,2,3,4]))
2  [4, 3, 2, 1]

round(number)

  • Arrondi un nombre.
 1  >>> round(1)
 2  1.0
 3  >>> round(1.2)
 4  1.0
 5  >>> round(1.5)
 6  2.0
 7  >>> round(1.7)
 8  2.0
 9  >>> round(-1.7)
10  -2.0
11  >>> round(-1.2)
12  -1.0

shuffle([])

  • Mélange aléatoirement une liste.
1  >>> import random
2  >>> x = [1,2,3,4,5]
3  >>> random.shuffle(x)
4  >>> x
5  [2, 5, 4, 1, 3]

str.startswith(prefix[, start[, end]])

  • Retourne True si la chaine commence par le préfix indiqué.
  • Ce préfix peut être un tuple. Les paramètres start et end (optionnel) test la chaine à la position indiquée.
  • Le test est sensible à la case.
 1  >>> "olivier".startswith("ol")
 2  True
 3  >>> "olivier".startswith(("ol", "eng"))
 4  True
 5  >>> "olivier".startswith(("xxx", "eng"))
 6  False
 7  >>> "olivier".startswith("OL")
 8  False
 9  >>> "olivier".startswith("ol")
10  True

list.sort()

  • La méthode sort permet de trier une liste.
1  >>> l = [5,1,4,2,10]
2  >>> l.sort()
3  >>> l
4  [1, 2, 4, 5, 10]

sorted(iterable)

  • Tri un élément itérable.
1  >>> sorted([3,2,12,1])
2  [1, 2, 3, 12]

str.split(séparateur)

  • La méthode split transforme une chaine de caractères en liste.
1  >>> "olivier:engel".split(":")
2  ['olivier', 'engel']

str.splitlines([keepends])

  • Retourne une liste des lignes de la chaine. Cette méthode utilise le saut à la ligne universel, le retour à la ligne n'est pas inclu, à moins de renseigner le paramètre keepends à True.
 1  >>> "olivier\n\n\engel\n\ndéveloppeur".splitlines()
 2  ['olivier', '', '\\engel', '', 'développeur']
 3  >>> "olivier\nengel\ndéveloppeur".splitlines()
 4  ['olivier', 'engel', 'développeur']
 5  >>> "olivier\n\rengel\n\rdéveloppeur".splitlines()
 6  ['olivier', '', 'engel', '', 'développeur']
 7  >>> "olivier\r\nengel\r\ndéveloppeur".splitlines()
 8  ['olivier', 'engel', 'développeur']
 9  >>> "olivier\r\nengel\r\n\r\ndéveloppeur".splitlines()
10  ['olivier', 'engel', '', 'développeur']
11  >>> "olivier\r\nengel\r\n\r\ndéveloppeur".splitlines(True)
12  ['olivier\r\n', 'engel\r\n', '\r\n', 'développeur']

sum(iterable [,start])

  • Additionne les valeurs d'un élément itérable.
1  >>> sum([1,2,3])
2  6

str.title()

  • Transforme la chaine dans un format title.
1  >>> "Ceci est un titre".title()
2  'Ceci Est Un Titre'

upper()

  • La méthode upper permet de mettre en majuscule une chaine de caractères.
1  >>> "olivier".upper()
2  'OLIVIER'

zip(*iterables)

  • Permet de regrouper sous la forme d'un tuple les items de listes.
1  >>> a = ["olivier", "bruce", "john"]
2  >>> b = ["engel", "wayne", "Wayne"]
3  >>> zip(a,b)
4  [('olivier', 'engel'), ('bruce', 'wayne'), ('john', 'Wayne')]

Procédure et fonctions

  • Une fonction n'est pas obligée de renvoyer une valeur, on parlera alors dans ce cas plutôt de procédure .