Fonctions et portée des variables : Différence entre versions

De WikiMéca
Sauter à la navigation Sauter à la recherche
(Page créée avec « Une fonction exécute un certain nombre d’instructions pré-définies, à partir de certaines valeurs données (paramêtres ou arguments) et retourne (éventuellement) u... »)
 
(11 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
Une fonction exécute un certain nombre d’instructions pré-définies, à partir de certaines valeurs données (paramêtres
+
Une fonction exécute un certain nombre d’instructions pré-définies, à partir de certaines valeurs données (paramêtres ou arguments) et retourne (éventuellement) une valeur.
ou arguments) et retourne (éventuellement) une valeur.
+
==Définition par le mot-clé <syntaxhighlight lang="Python" inline>def</syntaxhighlight>==
 
+
On peut définir ses propres fonctions à l’aide de la commande <syntaxhighlight lang="Python" inline>def</syntaxhighlight> en respectant la syntaxe suivante (attention aux
Certaines fonctions sont déjà définies par Python et directement accessibles : print, type, int, input...
+
indentations !) :
On peut définir ses propres fonctions à l’aide de la commande def en respectant la syntaxe suivante (attention aux
 
indentations !).
 
 
<syntaxhighlight lang="Python" line='line'>
 
<syntaxhighlight lang="Python" line='line'>
def fonction (p1 ,p2 ,...) :
+
def nom_de_la_fonction(p1 ,p2 ,...) :
   """ documentation `a l’attention de l’ utilisateur """
+
   instruction1 # commentaires
  global p2 # facultatif
+
   instruction2 # commentaires
   instruction1 # commentaire `a l’intention des programmeurs
+
   ...
   instruction2 ...
 
 
 
 
   return ( resultat ) # facultatif
 
   return ( resultat ) # facultatif
 
</syntaxhighlight>
 
</syntaxhighlight>
  
'''Remarque 1 :''' On peut créer une fonction sans paramètre : nom de la fonction()
+
'''Remarque 1 :''' On peut créer une fonction sans paramètre : nom_de_la_fonction()
  
'''Remarque 2 :''' La commande '''return''' permet de récupérer le résultat et de le stocker dans une variable si nécessaire.
+
'''Remarque 2 :''' La commande <syntaxhighlight lang="Python" inline>return</syntaxhighlight> permet de récupérer le résultat et de le stocker dans une variable si nécessaire.
  
C’est la seule valeur renvoyée par la fonction, mais si besoin cette valeur peut contenir plusieurs expressions. L’instruction
+
C’est la seule valeur renvoyée par la fonction, mais si besoin cette valeur peut contenir plusieurs expressions. L’instruction <syntaxhighlight lang="Python" inline>return</syntaxhighlight> arrête le déroulement de la fonction : le code situé ensuite ne sera pas exécuté.
return arrête le déroulement de la fonction : le code situé ensuite ne sera pas exécuté.
+
Cependant, on peut construire une fonction sans terminer par cette commande. Dans ce cas, la valeur renvoyée par la fonction est par défaut <syntaxhighlight lang="Python" inline>None</syntaxhighlight>.
Cependant, on peut construire une fonction sans terminer par cette commande. Dans ce cas, la valeur renvoyée par la
+
Une fonction peut comporter plusieurs <syntaxhighlight lang="Python" inline>return</syntaxhighlight>, par exemple à l’intérieur d’une structure conditionnelle. Dans ce cas, la fonction se finalisera au premier <syntaxhighlight lang="Python" inline>return</syntaxhighlight> rencontré, le suite du code ne sera pas compilée.
fonction est par défaut None.
+
Remarque 3 : On peut définir des paramètres par défaut. L’utilisateur n’est alors pas obligé de les donner, ils ont une valeur par défaut. Les paramètres par défaut sont toujours positionnés à la fin.  
Une fonction peut comporter plusieurs return, par exemple à l’intérieur d’une structure conditionnelle. Dans ce cas, la
 
fonction se finalisera au premier return rencontré, le suite du code ne sera pas compilée.
 
Remarque 3 : On peut définir des paramètres par défaut. L’utilisateur n’est alors pas obligé de les donner, ils ont une
 
valeur par défaut. Les paramètres par défaut sont toujours positionnés à la fin.  
 
  
 
Par exemple :
 
Par exemple :
Ligne 34 : Ligne 26 :
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Et dans l’interpréteur :
 
Et dans l’interpréteur :
<syntaxhighlight lang="Python" line='line'>
+
<pre>
 
>>> formule_politesse (’Delcroix ’)
 
>>> formule_politesse (’Delcroix ’)
 
  Veuillez agréer , Monsieur Delcroix , mes salutations respectueuses .
 
  Veuillez agréer , Monsieur Delcroix , mes salutations respectueuses .
Ligne 40 : Ligne 32 :
 
  >>> formule_politesse (’Dion ’, ’Madame ’)
 
  >>> formule_politesse (’Dion ’, ’Madame ’)
 
  Veuillez agréer , Madame Dion , mes salutations respectueuses .
 
  Veuillez agréer , Madame Dion , mes salutations respectueuses .
</syntaxhighlight>
+
</pre>
On peut aussi utiliser l’instruction lambda qui permet de créer rapidement des fonctions simples (par exemple des
+
 
 +
==Définition par le mot-clé <syntaxhighlight lang="Python" inline>lambda</syntaxhighlight>==
 +
On peut aussi utiliser l’instruction <syntaxhighlight lang="Python" inline>lambda</syntaxhighlight> qui permet de créer rapidement des fonctions simples (par exemple des
 
fonctions numériques).  
 
fonctions numériques).  
Par exemple, les lignes suivantes permettent de définir la fonction <math>f : x 7−→ x^2 + 1</math>.
+
Par exemple, les lignes suivantes permettent de définir la fonction <math>f : x \longmapsto x^2 + 1</math>.
  
 
<syntaxhighlight lang="Python" line='line'>
 
<syntaxhighlight lang="Python" line='line'>
f= lambda x : x **2+1
+
f= lambda x : x**2+1
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Documentation ===
+
== Documentation - docstring ==
On peut accéder à la documentation d’une fonction à l’aide de la commande help. Lorsqu’on écrit une fonction, elle peut être utilisée par d’autres personnes intervenant dans la construction d’un programme. Il est donc important de commenter cette fonction et en particulier de la documenter. La documentation permet à un utilisateur de comprendre la finalité et l’usage de la fonction. On peut ajouter une documentation entre des triples guillemets et avant le bloc d’instruction.
+
On peut accéder à la documentation d’une fonction à l’aide de la commande <syntaxhighlight lang="Python" inline>help</syntaxhighlight>. Lorsqu’on écrit une fonction, elle peut être utilisée par d’autres personnes intervenant dans la construction d’un programme. Il est donc important de commenter cette fonction et en particulier de la documenter.  
On fera bien la distinction entre les commentaires, qui sont plutˆot à destination de celui qui écrit ou lit le programme, et la documentation qui est destinée à l’utilisateur du programme.
+
La documentation permet à un utilisateur de comprendre la finalité et l’usage de la fonction. On peut ajouter une documentation entre des triples guillemets et avant le bloc d’instruction. Ce bloc est appelé la '''docstring''' de la fonction.
 +
On fera bien la distinction entre les commentaires, qui sont plutôt à destination de celui qui écrit ou lit le programme, et la docstring qui est destinée à l’utilisateur du programme.
  
 
'''Exemple :''' construction d’une fonction qui pour un entier p et un entier N donnés, affiche la table de multiplication par p de 1 à N.
 
'''Exemple :''' construction d’une fonction qui pour un entier p et un entier N donnés, affiche la table de multiplication par p de 1 à N.
 
<syntaxhighlight lang="Python" line='line'>
 
<syntaxhighlight lang="Python" line='line'>
 
def table (p,N) :
 
def table (p,N) :
""" Fonction é crivant la table de multiplication par p de 1 a N"""
+
  """ Fonction écrivant la table de multiplication par p de 1 a N"""
i=1 # initialisation du compteur i
+
  i=1 # initialisation du compteur i
while i <=N :
+
  while i <=N :
print (p," * ", i, " = ", p*i)
+
      print (p," * ", i, " = ", p*i)
i=i+1
+
      i=i+1
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
La docstring de la fonction est en ligne 2.
Et dans l’interpréteur :
+
Dans l’interpréteur :
<syntaxhighlight lang="Python" line='line'>
+
<pre>
 
>>> table (3 ,4)
 
>>> table (3 ,4)
 
3*1=3
 
3*1=3
Ligne 70 : Ligne 65 :
 
3*3=9
 
3*3=9
 
3*4=12
 
3*4=12
>>>help ( table )
+
>>> help ( table )
table (p,N)
+
table (p,N)
 
  Fonction écrivant la table de multiplication par p de 1 a N
 
  Fonction écrivant la table de multiplication par p de 1 a N
 +
</pre>
 +
 +
==Portée des variables ==
 +
Fréquemment, de nouvelles variables sont définies et utilisées dans le bloc d’instructions d’une fonction. Néanmoins, celles-ci '''ne sont pas référencées au niveau global'''. En effet, chaque fonction possède sa propre table de référencement, ce qui permet d’en limiter la portée. Autrement dit, leur contenu est '''inaccessible depuis l’extérieur de la fonction''' et en particulier au niveau de l’interprète de commande. De telles variables sont qualifiées de '''locales''', par opposition aux variables '''globales''', dont le contenu est accessible à tout niveau.
 +
 +
Exemple :
 +
 +
<syntaxhighlight lang="Python" line='line'>
 +
def f():
 +
    b = a # définition d'une variable locale b
 +
    return b
 +
</syntaxhighlight>
 +
Dans l'interpréteur :
 +
<pre>
 +
>>> a = 1 # définition d'une variable globale a
 +
 +
>>> f()  # execution de f
 +
1
 +
 +
>>> b
 +
NameError: name 'b' is not defined
 +
</pre>
 +
 +
Si on souhaite modifier le contenu d’une variable globale à l’intérieur du bloc d’instructions d’une fonction, il faut utiliser l’instruction <syntaxhighlight lang="Python" inline> global </syntaxhighlight> pour déclarer celles des variables qui doivent être traitées globalement.
 +
 +
Exemple :
 +
<syntaxhighlight lang="Python" line='line'>
 +
def h():
 +
    global a # déclaration d'une variable globale
 +
    a = 2
 +
    return a
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
Dans l'interpréteur :
 +
<pre>
 +
>>> h()
 +
2
 +
 +
>>> a    # la variable globale définie ligne 9 a bien été modifiée
 +
2
 +
 +
</pre>

Version du 12 juillet 2019 à 14:38

Une fonction exécute un certain nombre d’instructions pré-définies, à partir de certaines valeurs données (paramêtres ou arguments) et retourne (éventuellement) une valeur.

Définition par le mot-clé def

On peut définir ses propres fonctions à l’aide de la commande def en respectant la syntaxe suivante (attention aux indentations !) :

1 def nom_de_la_fonction(p1 ,p2 ,...) :
2    instruction1 # commentaires 
3    instruction2 # commentaires 
4    ...
5    return ( resultat ) # facultatif

Remarque 1 : On peut créer une fonction sans paramètre : nom_de_la_fonction()

Remarque 2 : La commande return permet de récupérer le résultat et de le stocker dans une variable si nécessaire.

C’est la seule valeur renvoyée par la fonction, mais si besoin cette valeur peut contenir plusieurs expressions. L’instruction return arrête le déroulement de la fonction : le code situé ensuite ne sera pas exécuté. Cependant, on peut construire une fonction sans terminer par cette commande. Dans ce cas, la valeur renvoyée par la fonction est par défaut None. Une fonction peut comporter plusieurs return, par exemple à l’intérieur d’une structure conditionnelle. Dans ce cas, la fonction se finalisera au premier return rencontré, le suite du code ne sera pas compilée. Remarque 3 : On peut définir des paramètres par défaut. L’utilisateur n’est alors pas obligé de les donner, ils ont une valeur par défaut. Les paramètres par défaut sont toujours positionnés à la fin.

Par exemple :

1 def formule_politesse (nom , genre =Monsieur ) :
2    print (Veuillez agréer ,, genre , nom , , mes salutations respectueuses .)

Et dans l’interpréteur :

>>> formule_politesse (’Delcroix ’)
 Veuillez agréer , Monsieur Delcroix , mes salutations respectueuses .

 >>> formule_politesse (’Dion ’, ’Madame ’)
 Veuillez agréer , Madame Dion , mes salutations respectueuses .

Définition par le mot-clé lambda

On peut aussi utiliser l’instruction lambda qui permet de créer rapidement des fonctions simples (par exemple des fonctions numériques). Par exemple, les lignes suivantes permettent de définir la fonction .

1 f= lambda x : x**2+1

Documentation - docstring

On peut accéder à la documentation d’une fonction à l’aide de la commande help. Lorsqu’on écrit une fonction, elle peut être utilisée par d’autres personnes intervenant dans la construction d’un programme. Il est donc important de commenter cette fonction et en particulier de la documenter. La documentation permet à un utilisateur de comprendre la finalité et l’usage de la fonction. On peut ajouter une documentation entre des triples guillemets et avant le bloc d’instruction. Ce bloc est appelé la docstring de la fonction. On fera bien la distinction entre les commentaires, qui sont plutôt à destination de celui qui écrit ou lit le programme, et la docstring qui est destinée à l’utilisateur du programme.

Exemple : construction d’une fonction qui pour un entier p et un entier N donnés, affiche la table de multiplication par p de 1 à N.

1 def table (p,N) :
2    """ Fonction écrivant la table de multiplication par p de 1 a N"""
3    i=1 # initialisation du compteur i
4    while i <=N :
5        print (p," * ", i, " = ", p*i)
6        i=i+1

La docstring de la fonction est en ligne 2. Dans l’interpréteur :

>>> table (3 ,4)
3*1=3
3*2=6
3*3=9
3*4=12
>>> help ( table )
 table (p,N)
 Fonction écrivant la table de multiplication par p de 1 a N

Portée des variables

Fréquemment, de nouvelles variables sont définies et utilisées dans le bloc d’instructions d’une fonction. Néanmoins, celles-ci ne sont pas référencées au niveau global. En effet, chaque fonction possède sa propre table de référencement, ce qui permet d’en limiter la portée. Autrement dit, leur contenu est inaccessible depuis l’extérieur de la fonction et en particulier au niveau de l’interprète de commande. De telles variables sont qualifiées de locales, par opposition aux variables globales, dont le contenu est accessible à tout niveau.

Exemple :

1  def f(): 
2      b = a # définition d'une variable locale b 
3      return b

Dans l'interpréteur :

>>> a = 1 # définition d'une variable globale a

>>> f()   # execution de f
1

>>> b 
NameError: name 'b' is not defined

Si on souhaite modifier le contenu d’une variable globale à l’intérieur du bloc d’instructions d’une fonction, il faut utiliser l’instruction global pour déclarer celles des variables qui doivent être traitées globalement.

Exemple :

1 def h(): 
2     global a # déclaration d'une variable globale 
3     a = 2 
4     return a

Dans l'interpréteur :

>>> h() 
2

>>> a    # la variable globale définie ligne 9 a bien été modifiée 
2