14: Méthodes

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.

Exemple
Inverser une liste.

Un exemple de mérhode qui prend un argument est str.startswith qui indique si une chaîne commence ou non par une chaîne donnée:

Exemple
Un exemple de méthode pour une chaîne.

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): trouve X dans la liste et retourne l'index i tel que list[i]==X en cherchant tous les éléments. Le plus petit i possible est retourné. Si X n'existe pas dans la liste, une ValueError est générée.
    • X in list retourne True si X est un élément de la liste sinon False. L'utiliser pour évite l'erreur ValueError.
  • list.count(X): retourne le nombre de fois qu'un élément X apparaît dans une liste.

Exemple
Méthodes listes.

Ces méthodes modifient la liste:

  • list.append(X) ajoute X à la fin de list
  • list.insert(i, X) ajoute X à la position i
  • list.extend(L) ajoute une liste L d'éléments à la fin
  • list.remove(X) supprime la première apparition de X
  • list.pop(i) efface & retourne l'élément list[i], tandis que list.pop() efface & retourne le dernier élément
  • del list[i] efface le ième élément de list
  • list.reverse() inverse la liste
  • list.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 Pyhton. Les listes supportent aussi des sous-ensemble plus compexe 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.

Exercice de code : Les replacements
En utilisant index et d'autres méthodes de listes, écrivez une fonction remplace(list, X, Y) qui remplace toutes les apparitions de X dans list par Y. Par exemple, si L = [3, 1, 4, 1, 5, 9] alors remplace(L, 1, 7) changera L en [3, 7, 4, 7, 5, 9]. Pour rendre l'exercice plus intéressant, vous n'êtes pas authorisés à utiliser []
Note: vous n'avez pas besoin d'utiliser return. Indice
Entrez instructions de test comme print(mafonction("argument de test")) ci-dessous.

Chaînes

Comme pour les listes, vous pouvez utiliser inindex 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îne S est une sous-chaîne de la chaîne T
  • S.index(T) trouve le premier index de ST est une sous-chaîne
  • S.count(T) donne le nombre d'occurences de T qui ne se chevauchent pas comme sous-chaîne de S

Exemple
Appel de index et count sur des chaînes.

Voici les méhodes 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 immutables. 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 occurence de la sous-chaîne ancien est remplacée par nouveau. Cela créé une nouvelle chaîne sans changer l'ancienne:

Exemple
Exemple: replace retourne une novuelle chaîne et ne modifie pas l'originale.

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 retourne True si str est une chaîne (ou caractère) composée de lettres uniquement
  • la méthode booléenne str.isdigit() qui retourne True si str est une chaîne (ou caractère) composée de chiffres uniquement
  • str.upper() qui retourne une version de str convertie en majuscule.

Exercice de code : Code postal exact
Definissez une fonction valideCodePostal
(S)
qui vérifie si S represente un code postal Canadien qui est valide:

  • d'abord, on efface tous les espaces;
  • ensuite, on examine la chaîne restante: elle est valide si elle est de la forme L#L#L# ou les L's sont des lettres (en majuscules ou minuscules) et les #'s sont des chiffres.

Si S n'est pas un code postal Canadien valide, retournez le booléen False. Si S est valide, retournez une version du même code postal au format L#L#L# où chaque L est convertie en majuscule.
Par exemple, si on appelle valideCodePostal(" e5 t   3S4") elle doit retourne "E5T3S4"

Entrez instructions de test comme print(mafonction("argument de test")) ci-dessous.

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'uatres 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:

Exemple
Les méthodes de str. Notez que startswith est une des méthodes.

Regarder les propriétés d'un objet s'appelle introspection. Tout en Python peut avoir des méthodes:

Exemple
Les membres de int.

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. Techniqueement, 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 syntax math.«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 (comme math), 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.