Fonctions - variables mutables, imutables

Les paramètres. Les fonctions

.

Introduction

.

En Python, TOUT est objet :

Les valeurs numériques, les chaînes de caractères, les listes tuples et dictionnaires, les fonctions, les classes, les instances de classes, les modules… tout.

Les variables ne sont que des noms qui sont associés à des objets.

.

Définition

.

Un objet est mutable lorsqu’il est possible de le modifier.

Un objet est immutable lorsqu’il est impossible de le modifier.

.

Immutable

.

Lorsque l’on fait des opérations sur des objets immutables pour obtenir une nouvelle valeur, on est obligé de construire un autre objet car les opérations ne permettent pas de modifier l’original.

Les objets immutables sont les valeurs numériques, les chaînes de caractères, et les tuples.

L’intérêt des objets immutables est que l’on est sûr que personne ne pourra modifier leur valeur. Tous les noms référençant un objet immutable peuvent considérer qu’il s’agit d’une constante tant qu’ils continuent à le référencer.

Les objets du type booléens, du type numériques, int, float, complex, (les chaînes sont des séquences immuables de point de code unicode), str, tuple sont immutables (ils ne peuvent pas être modifiés).

.

Mutable

.

Les objets mutables offrent des opérations permettant de modifier la valeur contenue dans l’objet, en conservant le même objet.

Les objets mutables sont les listes, les dictionnaires. Généralement les autres objets (ceux que vous créez) sont aussi mutables.

Les noms qui référencent des objets mutables peuvent voir l’objet qu’ils référencent modifié (par une fonction appelée, par du code exécuté dans un autre thread…).

Les objets du type list, dict, set, array sont mutables (leur contenu peut être modifié).

L’instruction a = a + 1 ne modifie pas la variable a mais crée une nouvelle variable du même nom (l’ancienne est donc écrasée) et lui donne la valeur :

(ancienne valeur de a) + 1

L’instruction a[0] = a[0] + 1 modifie la variable a.

L’instruction a = b ne crée pas une copie de l’objet b, mais juste de l’adresse mémoire de b. Si a et b sont des mutables, toute modification effectuée sur a sera également effectuée sur b. La fonction id() renvoyant la référence d’une variable permet de vérifier ce principe.

.

Exemples de programme qui affiche les id

.

Exemple n°1 : programme séquenciel

Résultat :

image0
image1

Exercice n°1 :

  1. Que contiennent les variables a et b après exécution des codes ci-dessous ?

  1. Programmer en python pour vérifier les résultats.

Exercice n°2 :

  1. Expliquer ces différentes instructions portant sur des listes a et b.

  2. Programmer en python pour vérifier les résultats.

  3. L’instruction a = b[:] aura-t-elle le même effet si b est une liste d’entiers et si b est une liste de listes ?

.

Fonctions et procédures

.

Passage de Paramètres :

Donc, en Python tous les paramètres sont passés par référence (références à des objets), ces références étant associées aux noms des paramètres lors de l’appel.

Si un paramètre est une valeur immutable, la fonction n’aura aucun moyen de modifier l’original, l’appelant conserve la valeur telle qu’il l’a transmise.

Si un paramètre est une valeur mutable, la fonction pourra modifier l’original, et avoir ainsi un effet de bord (désiré/prévu ou non) vis à vis de l’appelant qui a fourni ce paramètre.

Une fonction peut renvoyer plusieurs valeurs (en fait un tuple)

.

Définition

.

La syntaxe Python pour la définition d’une fonction est la suivante :

Les fonctions en informatique sont destinées retourner un résultat pour le programme principal. En langage python une fonction peut être utilisée comme une procédure, c’est-à-dire qu’elle modifie par exemple l’aspect du programme sans changer les valeurs.

Pour définir une fonction il faut écrire :

  • le mot clé def

  • puis le nom de la fonction la_fonction

  • on peut mettre des paramètres dans les parenthèses qui vont être utilisés par le bloc d’instructions. (variables) ou ()

  • Terminer la ligne par deux points  :

Le bloc d’instruction(s) commence après le caractère deux pointset le début de l’indentation située au-dessous du mot clé def se termine à la fin de l’indentation {indentation}

On peut passer des variables (ou des paramètres) dans les parenthèses, ou utiliser le mot global qui permet aux variables d’être utilisées par toutes les fonctions où elles sont inscrites dans global .

image4

  • Vous pouvez choisir n’importe quel nom pour la fonction que vous créez, à l’exception des mots réservés du langage, et à la condition de n’utiliser aucun caractère spécial ou accentué (le caractère souligné  " _ " est permis). Comme c’est le cas pour les noms de variables, il vous est conseillé d’utiliser surtout des lettres minuscules, notamment au début du nom (les noms commençant par une majuscule seront réservés aux classes.

  • Comme les instructions if et while que vous connaissez déjà, l’instruction def est une instruction composée. La ligne contenant cette instruction se termine obligatoirement par un double point lequel introduit un bloc d’instructions que vous ne devez pas oublier d’indenter.

  • La liste de paramètres spécifie quelles informations il faudra fournir en guise d’arguments lorsque l’on voudra utiliser cette fonction (les parenthèses peuvent parfaitement rester vides si la fonction ne nécessite pas d’arguments).

  • Une fonction s’utilise pratiquement comme une instruction quelconque. Dans le corps d’un programme, un appel de fonction est constitué du nom de la fonction suivi de parenthèses. Si c’est nécessaire, on place dans ces parenthèses le ou les arguments que l’on souhaite transmettre à la fonction. Il faudra en principe fournir un argument pour chacun des paramètres spécifiés dans la définition de la fonction, encore qu’il soit possible de définir pour ces paramètres des valeurs par défaut.

Exemple n° 2 :

Résultat :

image5
image6

Pour les puristes , les fonctions que nous avons décrites jusqu’à présent ne sont pas tout à fait des fonctions au sens strict, mais plus exactement des procédures .

Une « vraie » fonction (au sens strict) doit en effet renvoyer une valeur lorsqu’elle se termine.

Une « vraie » fonction peut s’utiliser à la droite du signe égale dans des expressions telles que

\(\ y\ = \ \sin(\mathbf{a})\).

On comprend aisément que dans cette expression, la fonction \(\mathbf{\sin}\mathbf{()}\) renvoie une valeur (le sinus de l’argument \(\mathbf{a}\mathbf{\ }\)qui est directement affectée à la variable \(y\).

Commençons par des exemples simples :

L’instruction return définit ce que doit être la valeur renvoyée par la fonction. En l’occurrence, il s’agit du cube de l’argument qui a été transmis lors de l’appel de la fonction.

.

Fonction lambda

.

La fonction lambda est une manière simplifiée d’écrire des fonctions.

Une fonction lambda est une fonction de base, elle peut être anonyme ou on peut lui donner un nom, dans l’exemple le nom est f .

Cette fonction est très riche, en particulier elle permet de faire fonctionner de façon récurrente une autre fonction dans les boutons et les fonctions qui doivent fonctionner en fonction du temps after

.

Résultats et fonctionnement

.

fonctions script

Une fonction renvoie toujours une valeur lorsque rien n’est fait, il s’agit de None .Pour mettre dans un programme une fonction que l’on veut programmer plus tard il y a le terme pass , cela permet de progresser et de revenir sur la fonction lorsque on a les données ou les conditions à respecter.

.

Gestion des exceptions :

Gestion des exceptions : script

Lorsque l’on utilise une fonction susceptible de générer une exception, on peut utiliser try et except

try essaye et except agit si try est une exception.

.

Exemples

.

Exemple 0501 :

script Résultat

Entrer un nombre entier :8

1 x 8 = 8 ;

2 x 8 = 16 ;

3 x 8 = 24 ;

4 x 8 = 32 ;

5 x 8 = 40 ;

6 x 8 = 48 ;

7 x 8 = 56 ;

8 x 8 = 64 ;

9 x 8 = 72 ;

.

Indentation

Calcul du PGCD avec un fonction très courte :

Une fonction peut utiliser une ou plusieurs autres fonctions.

Pour accéder au calcul du PGDC avec beaucoup de fonctions appuyer sur le lien Calcul du PGCD

image15

return désigne le ou les résultats de la fonction.

(a,b) Ce sont les paramètres de la fonction.

image14

.

Correction des exercices

.

Exercice n° 1 :

Exercice n° 2 :

image16

Alors comment copier une liste qui sera indépendante ?

Il faut utiliser a=b[ :]

Résultat :

image17

<

image18

.

La variable b est une liste de listes

image20

image19