Jusqu'à maintenant, nous avons vu deux structures de données en Python: les chaînes et les listes. Elles supportent plusieurs methodes, qui sont des variantes des fonctions.
Par exemple, une methode de liste
est la méthode reverse()
. Comme son nom l'indique, elle inverse une liste (par exemple le premier élément devient le dernier et vice-versa). On appelle une méthode en utilisant une structure point (.
) , de cette manière:
«nomObjet».«nomMéthode»(«liste d'arguments, s'il y en a»)
Pour comparer, la syntaxe que nous avons déjà vu pour appeler une fonction était
«nomFonction»(«liste des arguments, s'il y en a»)
Voici un exemple d'appel de la méthode reverse
pour une liste.
Un exemple de méthode qui prend un argument est str.startswith
qui indique si une chaîne commence ou non par une chaîne donnée:
De nombreuses méthodes
Nous mentionnons ci-dessous les méthodes les plus courantes pour les chaînes et les listes. Elles exécutent des tâches que vous pourriez écrire vous-même mais l'utilisation de méthodes standards a l'avantage de rendre le code plus facile à lire et à modifier pour les autres. Et pourquoi refaire quelque chose qui existe déjà!
Listes
Ces méthodes ne modifient pas les listes:
list.index(X)
: trouveX
dans la liste et retourne l'indexi
tel quelist[i]==X
en cherchant tous les éléments. Le plus petiti
possible est retourné. SiX
n'existe pas dans la liste, uneValueError
est générée.X in list
retourneTrue
siX
est un élément de la liste sinonFalse
. L'utiliser pour évite l'erreurValueError
.
list.count(X)
: retourne le nombre de fois qu'un élémentX
apparaît dans une liste.
Ces méthodes modifient la liste:
list.append(X)
ajouteX
à la fin delist
list.insert(i, X)
ajouteX
à la positioni
list.extend(L)
ajoute une listeL
d'éléments à la finlist.remove(X)
supprime la première apparition deX
list.pop(i)
efface & retourne l'élémentlist[i]
, tandis quelist.pop()
efface & retourne le dernier élémentdel list[i]
efface lei
ème élément delist
list.reverse()
inverse la listelist.sort()
trie la liste
Toutes les méthodes ci-dessus excepté pop
retournent None
. Certaines de ces méthodes peuvent être appelées avec des arguments un peu différents; pour plus d'informations voir la section list methods de la documentation Python. Les listes supportent aussi des sous-ensemble plus complexe appelés "tranches" qui permettent l'insertion et l'effacement de toute une sous-liste, similaire à la notation string[x:y:z]
que nous avons vu aux leçons précédentes.
Chaînes
Comme pour les listes, vous pouvez utiliser in
, index
et count
avec les chaînes. Elles sont encore plus puissantes puisqu'elles fonctionnent avec les sous-chaînes également et pas que pour trouver des caractères seuls:
S in T
est un booléen qui indique si une chaîneS
est une sous-chaîne de la chaîneT
S.index(T)
trouve le premier index deS
oùT
est une sous-chaîneS.count(T)
donne le nombre d'occurrences deT
qui ne se chevauchent pas comme sous-chaîne deS
Voici les méthodes de str
les plus couramment utilisées:
- Casse des lettres:
capitalize, lower, upper, islower, isupper
- Caractères:
isalpha, isdigit
- Padding:
center, ljust, rjust
;strip
efface le padding - Sous-chaînes:
endswith, startswith, find, replace
- Parcours:
split, splitlines
Nous introduirons ces méthodes plus en détails lorsque nous en aurons besoin. Une liste détaillée de méthodes pour chaînes est donnée dans la documentation Python.
Les chaînes sont immuables. Nous avons mentionné list.reverse()
qui change une liste en l'inversant, mais il n'y a pas de méthode str.reverse()
. Ceci est parce que les objets chaînes ne peuvent pas être modifiés une fois qu'il ont été créés. La leçon 17 donnera plus d'explications à ce sujet.
Voici un exemple d'une méthode chaîne: S.replace(ancien, nouveau)
retourne une version modifée de S
dans laquelle chaque occurrence de la sous-chaîne ancien
est remplacée par nouveau
. Cela créé une nouvelle chaîne sans changer l'ancienne:
Pour l'exercice suivant, ces méthodes seront utiles:
str.replace
, que nous venons de décrire- la méthode booléenne
str.isalpha()
qui retourneTrue
sistr
est une chaîne (ou caractère) composée de lettres uniquement - la méthode booléenne
str.isdigit()
qui retourneTrue
sistr
est une chaîne (ou caractère) composée de chiffres uniquement str.upper()
qui retourne une version destr
convertie en majuscule.
Le reste de cette leçon est technique et n'est pas requis pour la suite des leçons. |
A propos des objets
Au fur et à mesures que vous allez apprendre Python, vous allez découvrir d'autres classes que les chaînes et les listes. D'autres classes que vous rencontrerez surement sont les objets fichier, les sets et les dictionnaires. Elles ont toutes de nombreuses méthodes très utiles. Vous pouvez demander à Python toutes les méthodes d'une objet donné en utilisant la fonction dir
:
Regarder les propriétés d'un objet s'appelle introspection. Tout en Python peut avoir des méthodes:
Certaines entrées de dir
sont en fait des variables membre au lieu de méthodes, par exemple int.denominator
est un nombre et pas une fonction. Techniquement, les fonctions sont des objets en Python, donc les fonctions membres sont des cas spéciaux de variables membres.
Vous pouvez faire des introspections de modules également. Si vous importez le module math (import math
) et appelez dir(math)
vous obtiendrez une liste de tout ce qui est contenu dans le module math
, y compris le nombre pi
et la fonction sqrt
.
Pourquoi des objets?
Pourquoi avons-nous des méthodes comme S.index(T)
au lieu d'un simple appel de fonction comme index(S, T)
? C'est-à-dire, pourquoi avons-nous l'objet S
et la méthode str.index()
du tout?
Les principaux avantages des objets deviennent plus claires quand vous commencer à programmer avec des types de données plus complexes et variés. Chaque type d'objet (par exemple, la classe str
) représente à la fois les données sous-jacentes stockées (p. ex., une séquence de caractères et sa longueur) et les types d'opérations qui peuvent être effectuées sur celui-ci (p. ex., la conversion en majuscules et la production d'un sous-chaîne). Un exemple plus complexe est les objets de fichiers: ils représentent le nom du fichier qui est ouvert, votre position actuelle dans le fichier, et les méthodes pour les lire et écrire. Vous pouvez même définir vos propres types de données!
Cette approche générale est appelée «programmation orientée objet» (POO). Certains de ses avantages sont les suivants:
- organisation: Tout dans le module
math
peut être accédé par la syntaxemath.«nom»
. Ca éviter incompatibilités avec les noms de variables dans votre programme. - encapsulation: Tout comme un programme peut travailler avec plusieurs chaînes ou plusieurs objets fichiers en même temps, vous pouvez travailler avec plusieurs copies distinctes (instances) de n'importe quel type de données tu définisse.
- réutilisation: Une fois que vous avez défini un type de données (comme
str
) ou une bibliothèque de méthodes (commemath
), vous pouvez le réutiliser encore et encore, ou le donner à d'autres personnes à utiliser. - débogage: Nous avons vu comment l'écriture des fonctions évite la nécessité d'avoir de nombreuses copies du même code, et que ça rend le débogage plus facile. On obtient le même effet quand on definit toutes les fonctions associées à un type de données en un seul endroit (la définition de la classe).
- relations entre les classes: Python sait que la méthode
index
signifie une chose pour une chaîne et quelque chose d'autre pour une liste. De même, non seulement peut Python lire et écrire des fichiers sur votre ordinateur, mais il peut également lire et écrire des données sur Internet. Dans les deux cas (séquences des caractères ou de quelque d'autre, et les fichiers locaux ou distants) les classes liées peuvent être traitées de manière uniforme en utilisant le concept d'héritage.
Dans le reste du Cercles Informatiques nous allons seulement utiliser des objets et des méthodes. Vous pouvez en apprendre davantage sur la création de vos propres classes plus tard (voir la page Ressources).
Les trois leçons suivants peuvent être complétées dans n'importe quel ordre. Ils donnent une variété de défis combinant les thèmes des précédentes leçons.