Même si l’on peut concevoir que les subtilités de Python sont réservées aux professionnels et aux experts de la programmation, les exceptions et les subtilités du langage peuvent nous aider, comme en mathématiques, à mieux comprendre le langage Python et ainsi à améliorer notre capacité à traduire, à résoudre un exercice ou bien à lire un programme.
Cet article s’adresse à ceux qui sont déjà à l’aise en Python.
Les fonctions de Python
Présentation classique des fonctions
Même si les fonctions sont les objets les plus basiques de Python, le langage et les subtilités révèlent vraiment la structure de la pensée qu’il faut avoir pour réussir en Python.
En effet, les fonctions classiques que l’on connaît se présentent sous la forme suivante :
Cependant, la réelle structure d’une fonction se décrit comme suit, où « type » décrit un type :
Afin de comprendre au mieux les différentes commandes Python mises en jeu, il faut saisir la notion de « type » en Python.
Les types en Python
Le type d’une variable en Python est simplement sa nature. Ainsi, le « type » d’une liste renverra « list », celui d’un nombre entier renverra « int », comme « integer », qui renvoie aux entiers numériques en anglais.
Voyons les exemples suivants :
Il faut garder à l’esprit que la notion de « type » n’est qu’une information et non pas une variable ou une commande. Cela revient à décrire son animal de compagnie en disant que c’est un chien. Il répond à certaines caractéristiques, mais on ne peut pas les changer en utilisant sa qualité de chien.
Conséquemment, on utilisera « type » uniquement si l’on cherche de l’information sur une variable, mais on ne peut pas manipuler ledit « type » comme une variable.
Présentation exhaustive des fonctions
Reprenons une variation du code précédent :
Dans la première ligne, on a bien « def » pour définir une fonction, puis le nom de la fonction – qui est ici « fonction » –, puis l’argument de la fonction entre parenthèses, « x », c’est-à-dire ce sur quoi la fonction agit (cf. ci-dessous).
On voit que cette structure rend plus clair le processus de la fonction. Elle prend en argument seulement des variables d’un certain type.
Ensuite, la flèche et le mot avant les deux points ( « : ») indiquent le type de la variable renvoyée par la fonction (voir ci-dessous).
Bref, dans l’exemple ci-dessus, la fonction nommée « fonction » prend un « x » qui est un entier et renvoie un objet de type « tuple », soit un couple.
Dans l’exemple ci-dessous, la fonction prend en argument « L », une variable de type « list », un autre argument nommé « i » de « type « int » et renvoie un objet de type « list » (si « i » est un indice correct).
Bilan
Le travail fait ici, servant à présenter une fonction exhaustivement, n’est pas superficiel ou inutile. Il renforce la lisibilité du programme et permet de mieux se représenter le rôle et la nature des variables informatiques mises en jeu dans le code. Ainsi peut-on éviter un nombre conséquent d’erreurs, même en effectuant le travail mentalement.
N.B. : Écrire une fonction de cette façon ne gêne en aucune façon son exécution.
Le signe « = » en Python
Le signe « = »
Ce signe est en Python complètement différent de l’interprétation mathématique du même signe « = ». En effet, il est révélateur de se pencher sur le pseudo-code derrière le code python du « = ».
Pseudo-code : Aussi appelé code « naturel », ce code modélise avec des mots français (« tant que », « si », « alors », « fin tant que », etc.) le code Python ou tout type de code informatique et résonne un peu plus avec la logique mathématique inhérente au code Python.
Le pseudo-code pour le « = » est le symbole « <- ». Ceci est révélateur pour plusieurs raisons :
- la flèche va dans un seul sens, ce qui indique par conséquent que le « = » n’est pas une relation réciproque en informatique ;
- la flèche signifie non pas que l’on attribue une valeur à une variable (a, x…), mais que l’on affecte le même « chemin » vers la mémoire à cette variable, mémoire où est stockée une éventuelle valeur.
Entre informatique et électronique
Il va sans dire que le point 2 est le plus important en pratique et le plus difficile à retenir.
Voyons un exemple classique :
Cela donne le même résultat que la variable « L », et cela apparaît correct, car l’emplacement mémoire est le même. On a simplement affecté le même « chemin mémoire » de l’ordinateur à la variable M. Pour prouver que cela n’est pas correct, regardons ci-dessous :
On voit bien que les deux listes sont liées, car changer la liste « M » change la valeur vers laquelle la variable « L », elle aussi, est renvoyée. On réalise ainsi une copie de la liste pour se tirer d’affaire, ce qui crée un nouvel emplacement mémoire avec la même valeur.
Beaucoup d’erreurs, dans des exercices où il faut nommer beaucoup de variables, viennent de ces « conflits de variables ». Cela est notamment fréquent dans les listes où on est facilement tenté de changer un élément de la liste. Cela ne peut pas arriver pour les nombres classiques où le processus est différent.
Conclusion
Ces deux focus présentent un aspect méconnu de Python, surtout pour la première partie sur les fonctions, mais il est, à mon sens, important de les avoir à l’esprit pour garder les idées claires dans un programme long, par exemple. Si cela arrive rarement en prépa, un programme de plusieurs dizaines de lignes et impliquant des dizaines de variables doit être le plus lisible possible.
N’hésite pas à consulter tous nos articles de mathématiques !