Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Une chaine : une séquence de caractères encadrés par des côtes ou des chevrons ‘’ ou
«»:
Taille : len(C)
Accès à un élément : C[index de l’élement] : Les index permis sont compris entre 0 et
len(C )-1 pour un parcours de gauche à droite et entre -1 et –len(C) pour un parcours
de droite à gauche
Accès à une partie des éléments : C[i :j] : renvoie un conteneur constitué des éléments
se trouvant entre la position i et la position j-1.
NB :
- C[ :i] : renvoie la sous liste constituée des éléments d’indices compris entre 0 et i-1
- C[i :] : renvoie la sous liste constituée des éléments d’indices compris entre i et len(C)-
1.
- C[ ::] :renvoie la totalité de la liste
Accès à une partie des éléments avec notion de pas : C[i :j :k] : renvoie un conteneur
stockant les éléments entre les deux positions i et j-1 en effectuant des sauts
d’amplitude k
Test d’appartenance : x in C
Application :
- Créer un tuple t=(1,2,4,-6) et une chaine ch=’abc cd ! ;:’
- Appliquer toutes les commandes vues précédemment pour t et ch.
NB : Les conteneurs ne peuvent pas être tous modifiés après leurs créations, seules les listes
sont des structures de données modifiables ou mutables ou non immuables, tuples et chaines
sont non mutables ou immuables.
commande list :
avec les [] :
d’un slice
Application : créer une liste contenant les entiers compris entre 0 et 5 puis modifier tous les
éléments impairs par des 0 en utilisant la notion de pas.
ajout
d’un élément à la fin : on utilise la commande append
d’un slice
copie :
copie normale : avec la commande copy :
par conversion
en compréhension
modification :
Les tuples sont non modifiables, toute tentative de mise à jour déclenche une erreur :
ajout d’un élément :
Recherche d’une sous chaine dans une autre chaine : commande find :
Dictionnaire vide :
La commande dict (avec comme paramètre une liste de listes, chacun de la forme
[clé ,valeur]) :
Les {} :
En compréhension
Directement (en utilisant la syntaxe NomDict[cle]=valeur) :
La taille d’un dictionnaire qui est le nombre d’entrées qu’il contient est accessible via la
commande len, pour afficher une valeur correspondante à une clé, on utilise la syntaxe
NomDict[clé], les deux opérateurs in et not in testent l’appartenance d’une clé à un
dictionnaire :
Python permet d’accéder aux informations stockées au niveau d’un dictionnaire de plusieurs
manières :
Une entrée peut être accédée par la commande get :
créer une entrée vide si on fournit un index non encore utilisé et pas de valeur en
deuxième paramètre :
La mise à jour d’un dictionnaire passe par l’ajout, la modification et la suppression d’entrées :
copy : La syntaxe est d2=d1.copy() : copie un dictionnaire dans un autre après avoir
importer le module copy.
ensemble vide :
la commande set :
les {}
en compréhension
Un ensemble est une structure de données non ordonnée. La commande len donne la
cardinalité de l’ensemble. On peut tester l’appartenance d’un élément à un ensemble mais on
ne peut pas utiliser un indice :
La mise à jour d’un ensemble est possible vue que c’est un type mutable :
L’union
L’intersection
La différence
La différence symétrique
6.2. Définition
Une fonction est un bloc d’instructions qui possède un nom, qui reçoit un certain
nombre de paramètres et renvoie un résultat. L’usage des fonctions permet :
d’éviter la répétition
de séparer les données des résultats
de rendre le code réutilisable à travers l’importation de fichiers de fonctions…
et de décomposer les tâches complexes en tâches simples plus abordables.
On doit définir une fonction alors à chaque fois qu’un bloc d’instructions se trouve
répété à plusieurs reprises. Il s’agit d’une factorisation du code.
6.3. Syntaxe
Une fonction Python à la syntaxe suivante :
On vient de créer une première fonction sous Python (La saisie peut être effectuée au
niveau du shell ou à l’intérieur d’une nouveau fichier .py, la différence entre les deux
cas sera traitée ultérieurement, mais pour le moment on opte pour la première option).
La fonction TableMul5 ne possède pas de paramètres, on lui a confié la responsabilité
d’afficher la table de multiplication de 5, ce qui explique la documentation entre triple
côtes… Une fois déclarée, la fonction peut être appelée comme le montre l’exemple
suivant :
Une fonction est définie pour assurer la factorisation du code et la réutilisabilité. Dans
l’exemple précédent, en dehors de la valeur 5, la fonction n’accepte aucune autre
valeur. D’où la pertinence de la notion de paramétrage. On redéfinit alors TableMul en
réservant un paramètre n qui représentera la valeur de l’entier dont on cherche à
afficher sa table de multiplication :
La fonction TableMul autorise des appels avec des paramètres de natures différentes
(Besoin de contrôle d’eventuelles erreurs de saisie à travers la gestion des
exceptions…)
:
6.5. Le NonType & les fonctions avec retour
On peut aller un peu plus loin avec les fonctions Python et développer une vraie
fonction qui retourne un résultat récupérable par la fonction appelante (on traitera plus
tard la fonction main qui représente la notion de programme principale). Le mot clé
return permet d’arrêter l’exécution d’une fonction et de renvoyer un résultat. Tous les
types vus en Python peuvent être utilisés comme un retour. Quand la fonction ne
programme pas d’instructions de type return, Python retourne tout de même un objet
vide ayant comme type NoneType. C’est un type réservé par le langage pour exprimer
le vide, tel est le cas d’une liste ou d’un tuple vide.
On va partir d’une fonction qui affiche la somme de deux entiers passés en paramètres :
En vérifiant le type du résultat obtenu, on tombe sur le cas d’un objet vide, très logique
print ne fait pas le travail de return :
Rectifions la fonction som de sorte qu’elle soit une vraie fonction avec un return :
Le type du résultat est bel et bien un entier. Le mot clé return peut figurer dans
plusieurs endroits au sein d’une fonction. La fonction signe retourne une chaine
exprimant le signe d’un argument x :
Quand une fonction programme plus d’un paramètre en retour, le type tuple s’avère
très utile. La fonction somdifprod calcule la somme, la différence et le produit de deux
entiers a et b passés en paramètres, un objet de type tuple constitué des trois résultats
est alors retourné. Au moment de l’appel, il faut prendre en considération la nature du
résultat. Soit qu’on utilise un objet qui stockera tout le tuple puis pour accéder aux
résultats on utilise les indices respectifs suivant la taille de ce dernier, soit qu’on
effectue un appel basé sur trois variables :
La première version de la fonction permut est supposée échanger le contenu des deux
variables a et b :
Sauf que le contenu des deux variables reste inchangé preuve que les types non
mutables ne peuvent pas être modifiés. Dans cette deuxième version, on effectue un
affichage du contenu de a et b à l’intérieur de la fonction avant la fin de son exécution
- Passage par variable : Les objets mutables sont modifiables par nature. La fonction
ajout ajoute à la fin d’une liste l un objet x.
Pour mieux assimiler la notion de mode de passage, on se base sur l’évolution de la
valeur des identifiants des paramètres avant l’appel, au cours et à la fin de l’exécution
d’une fonction :
Suite à l’appel de la fonction min3, on obtient la liste des objets locaux et globaux
pour chacune des fonctions min2 et min3. La fonction min2 figure comme un objet
local à la fonction min3.
6.11. Les variables globales
Pour forcer une fonction à considérer une variable comme globale, on utilise le mot
clé global suivi du nom de la variable en question. La fonction inc1 utilise la variable
x sans la déclarer ni comme paramètre ni comme variable globale. L’interpréteur ne
reconnait pas x et déclenche une exception :
la deuxième version, inc2(), la variable x est déclarée globale d’une manière explicite.
La variable est initialisée à l’extérieur de la fonction et son contenu est modifiable par
les fonctions qui la déclarent comme avec le mot clé « global ».
6.12. Les fonctions lambda
En Python, une fonction lambda est une fonction anonyme (à laquelle on n’a pas
donné de nom), et qu’on peut appliquer “à la volée” dans une expression. La syntaxe
est : lambda paramètres : expression
Les fonctions lambda sont réservées à des situations relativement simples. Leur
définition doit tenir sur une seule ligne, et elles ne peuvent pas contenir d’instructions
composées (pas d’affectation, pas de boucle, etc.). Elles consistent donc
essentiellement en la définition d’une expression calculée en fonction des paramètres
qui lui sont passés.
Pour prendre un exemple simpliste (et pas très utile), les deux définitions suivantes de
la fonction f sont équivalentes :
Les fonctions anonymes permettent d’appliquer deux commandes intéressantes sur les
listes :
map : Applique une fonction sur tous les éléments d’une liste pour former une
nouvelle liste distincte de l’initiale. La syntaxe de map est la suivante :
list(map(f,l))
filter : crée une liste contenant les éléments qui ne vérifient pas un critère spécifié
par une fonction f d’une liste initiale. La syntaxe de filter est la suivante :
list(filter(f,l))
Supposons qu’on veut supprimer tous les multiples de 3 d’une liste d’entiers :
6.13. Gestion des exceptions
Quand une erreur se produit dans un script, elle provoque l’arrêt du programme et
l’affichage d’un message d’erreur. Pour éviter cette interruption brutale, on peut
appliquer un traitement spécifique. Plus généralement, on peut traiter une situation
exceptionnelle dont on ne sait pas forcément où et quand elle va survenir à l’intérieur
d’un bloc donné. Plutôt que de parler d’erreur, on emploiera donc le terme “exception”
et prévoir une réaction adaptée à une exception, c’est la “rattraper”.
Pour le traitement des exceptions, Python offre la clause try: ... else.La forme la plus
simple est la suivante, où le bloc2 est parcouru si une exception (quelle qu’elle soit)
est rencontrée dans le bloc1 (cette exception provoque l’arrêt du bloc1 et le passage
immédiat au bloc2) :
On peut également prévoir un traitement particulier pour telle ou telle exception. Dans
ce cas, on utilisera une construction un peu plus élaborée, du genre :
On souhaite développer un module intitulé pile qui permet de créer une nouvelle
structure de donnée LIFO (Last In First Out). Cette structure repose sur deux
opérations :
Empiler : ajouter un nouvel élément à la fin de la pile si cette dernière n’est pas
saturée
Dépiler : supprimer toujours l’élément récemment ajouté si la pile n’est pas vide.
Sous Python, on ouvre un nouveau script avec CTRL+N, pour éditer notre script :
On enregistre ce script sous le nom de « pile.py ». Le module est prêt à l’utilisation :