Connexion élèves

Choisir le(s) module(s) à installer :

Les fonctions

Non, non, rassurez-vous, pas de maths ici ( quoique...), la notion de fonction en informatique est assez différente de celle utilisée en mathématiques.

Vous avez en fait déjà utilisé des fonctions ( print(), input(),...), mais à quoi exactement correspond cette notion ?

Certaines parties de programme peuvent ( ou doivent ) être parfois utilisées plusieurs fois; il est donc nécessaire de pouvoir les « appeler » sans pour autant ré-écrire à chaque fois l'ensemble du code. Ces parties de programmes peuvent être regroupées dans des fonctions qui faciliteront la lecture et la compréhension du programme principal.

Engrenages

Voici un exemple qui illustre la nécessité et l'intérêt de ce concept.

Supposons que vous deviez écrire un script qui calcule le volume d'un parallélépipède pour différentes valeurs de ses côtés. On pourrait écrire par exemple quelque chose comme :


# cas n°1
longueur = 5
largeur = 10
hauteur = 8
volume = longueur * largeur * hauteur
print(volume)

# cas n°2
longueur = 15
largeur = 12
hauteur = 10
volume = longueur * largeur * hauteur
print(volume)

# cas n°3
longueur = 10
largeur = 10
hauteur = 20
volume = longueur * largeur * hauteur
print(volume)
		

On constate tout de suite que l'on a écrit à peu près 3 fois la même chose, en ne modifiant à chaque fois que la valeur des variables...

Il serait donc judicieux de coder une seule fois les instructions communes aux différentes parties du script ci-dessus, tout en permettant à ces instructions de "s'adapter" à des valeurs de variables différentes : c'est le rôle d'une fonction, qui va "regrouper" en un même endroit du code la ou les instruction(s) qui réalisent le traitement :


		
		fonction permettant de calculer le volume :
			volume = longueur x largeur x hauteur
			renvoyer le résultat
			
		# cas n°1
		utiliser la fonction avec les valeurs 5, 10 et 8
		imprimer le résultat
		
		# cas n°2
		utiliser la fonction avec les valeurs 15, 12 et 10
		imprimer le résultat
		
		# cas n°3
		utiliser la fonction avec les valeurs 10, 10 et 20
		imprimer le résultat
		

Le script est ainsi beaucoup plus concis et lisible, sa maintenance et son débogage en seront très facilités !!

Une fonction est donc une sorte de "programme dans le programme".

Fonctions en Python et vocabulaire

Comme dans tout langage, une fonction en Python suit des règles d'écriture et d'utilisation précises.

Définition d'une fonction

Syntaxe

La définition d'une fonction correspond à l'écriture des instructions qui effectueront la tache pour laquelle elle est conçue.

Dans le cas d'un langage compilé ( comme C, Java, C++,...), la définition des fonctions peut se faire n'importe où dans le code, en dehors du corps principal du programme.
Dans le cas des langages de script comme Python, la définition des fonctions doit se faire avant leur utilisation dans le code, donc généralement en tout début de script, après les éventuelles instructions d'importation de module(s).


def nom_de_la_fonction(paramètres):
	.....................
	Instruction(s)
	.....................
	return résultat
		
  • en Python, la définition d'une fonction commence par le mot-clé def
  • une fonction a un nom; les mêmes restrictions que pour les noms de variables s'appliquent ici aussi, en utilisant la convention de nommage dite snake case.
  • une fonction peut avoir des paramètres : il s'agit de une ( ou plusieurs...ou zéro ! ) variables ( séparées par des virgules ) qui "récupéreront" les valeurs que l'on aura "envoyées" depuis le programme principal à la fonction pour qu'elle travaille avec. Une fonction peut en avoir zéro, un ou plusieurs.
  • les instructions définissant le corps de la fonction sont indentées par rapport au mot-clé def.
  • à la fin de la fonction, le mot clé return suivi du résultat du traitement ( une valeur particulière ou le contenu d'une variable ) permet de renvoyer le résultat du travail de la fonction au programme principal.
    Une fonction peut éventuellement renvoyer plusieurs résultats différents ( séparés par des virgules ), ou alors aucun ( dans ce cas, le mot-clé return n'est pas utile ).

Pour l'exemple d'introduction, on pourrait ainsi définir une fonction calcul_volume() de la façon suivante :


def calcul_volume(longueur, largeur, hauteur): # la fonction a besoin de 3 paramètres pour faire le calcul du volume
	volume = longueur * largeur * hauteur
	return volume 
		

On notera bien que, pour l'instant, la valeur des variables longueur, largeur et hauteur n'est pas encore définie ( elles n'ont même pas été initialisées ! ).
On leur donnera en fait des valeurs par la suite, lorsqu'on appellera ( c'est à dire, exécutera ) vraiment la fonction.

Pour l'instant, ces variables sont donc l'équivalent du "x" dans une équation mathématique, c'est à dire quelque chose qui peut prendre a priori n'importe quelle valeur.

On ne mettra donc surtout pas de input() ou de largeur = 3 dans une fonction pour coder "en dur" la valeur des paramètres, ce n'est pas comme ça que cela fonctionne !!

Quelques exemples de définition de fonctions

Appel d'une fonction

Principe

Pour "utiliser" ensuite une fonction une fois celle-ci définie, il faut l'appeler afin qu'elle s’exécute : si on définit une fonction sans l'appeler, rien ne se passera !

L'appel d'une fonction correspond au moment où on l’exécute; cet appel prend la forme d'une instruction généralement placée dans le corps principal du programme. ( mais pas obligatoirement : une fonction peut appeler une autre fonction ! )

Lors de l'appel d'une fonction, il se passe en réalité plusieurs choses au même endroit du script :

  • on passe ( = "transmet" ) à la fonction certaine(s) donnée(s) appelée(s) argument(s), ou paramètre(s) formel(s), qui seront "récupérés" par les paramètres de la fonction.
  • la fonction exécute la tache pour laquelle elle est conçue en utilisant les données de ses paramètres.
  • la fonction renvoie alors son résultat, et le programme principal "récupère" ce résultat

( Tout se passe donc comme si l'instruction d'appel avait été remplacée dans le code par les instructions de la fonction. )

Appel de fonction

L'appel d'une fonction se fait simplement en indiquant son nom, avec entre parenthèses, la liste du ( ou des ) arguments(s) à lui passer, dans le même ordre que celui des paramètres dans sa définition.( si la fonction n'a aucun paramètre, on ne lui passe aucun argument ! ).
Les arguments peuvent être des valeurs, des noms de variables, des expressions, etc...


nom_de_la_fonction(arg1, arg2,...)	
			

Mais attention, le fait qu'une fonction renvoie un résultat ne veut pas dire que le programme principal peut directement l'utiliser; lors de l'appel d'une fonction, il faut donc en plus "faire quelque chose" du résultat renvoyé par la fonction, comme l'afficher ou l'affecter à une variable ( sinon ce résultat est "perdu" ! ) :


print(nom_de_la_fonction(arg1, arg2,...))  # affichage de la valeur renvoyée par la fonction
	
result = nom_de_la_fonction(arg1, arg2,...)	# la variable result contiendra la valeur renvoyée par la fonction
			

Le fait qu'une fonction renvoie un résultat ne veut pas dire que celui-ci va s'afficher ou qu'il sera gardé en mémoire : il faut "faire quelque chose" de ce résultat...

La majorité des fonction renvoient un résultat, c'est par exemple le cas de la fonction input, dont il faut affecter le résultat à une variable, sinon ce que l'utilisateur avait rentré est perdu !

D'autres fonctions ne renvoient aucun résultat, c'est le cas de la fonction print.
Mais en Python, c'est un peu particulier : une fonction qui ne renvoie aucun "vrai" résultat renvoie None, un mot-clé signifiant "rien".

Quelques exemples d'appel de fonction


# Définition des fonctions

def message_de_bienvenue( nom ):
	return 'Bonjour' + nom  + 'et bienvenue dans ce programme.'
	
def volume_sphere(r):
	pi = 3.1415
	volume = (4/3)*pi*r**3
	return volume

def division( n1, n2 ):
	quotient = n1 // n2
	reste = n1 % n2
	return quotient, reste
	
def calcul_volume(longueur, largeur, hauteur): # la fonction a besoin de 3 paramètres pour faire le calcul du volume
	volume = longueur * largeur * hauteur
	return volume 
	
# Programme principal

nom = input('Quel est votre nom ?')
print(message_de_bienvenue( nom ))

volume = volume_sphere(5) # calcul du volume d'une sphère de rayon r = 5
print( volume )

volume = calcul_volume(10, 5, 2)
print( volume ) 

quotient, reste = division(125, 23) # il faut passer 2 arguments, et récupérer 2 résultats !!
print('Quotient =', quotient)
print('Reste =', reste )
		

On peut remarquer qu'il n'y a pas d'ordre particulier pour la définition des fonctions, du moment que cette définition se fait avant l'appel de la fonction.

Don't forget to call functions !!

QCM d'entraînement

Exercices

Fonction cube ( un seul paramètre )

  1. Écrire une fonction cube() qui retourne le cube de la valeur passée en paramètre.
  2. Écrire une instruction qui appelle la fonction avec divers arguments, et qui affiche le résultat qu'elle renvoie
def cube(a): pass

Lien vers les RÉPONSES

Fonction somme ( plusieurs paramètres )

  1. Définir une fonction somme() qui prend en paramètres 3 nombres ( entiers ou pas ) et qui renvoie leur somme.
  2. Écrire une instruction qui appelle la fonction avec divers arguments, et qui affiche le résultat qu'elle renvoie
def somme(n1, n2, n3): pass

Lien vers les RÉPONSES

Fonctions calculs multiples ( renvoi de plusieurs résultats )

  1. Écrire une fonction calculs() qui :
    • prend en paramètres 2 nombres ( entiers ou pas )
    • qui renvoie simultanément leur somme, leur soustraction, leur multiplication et leur division.
  2. Écrire une instruction qui appelle la fonction avec divers arguments, et qui affiche les résultats qu'elle renvoie
def calculs(n1, n2): pass

Lien vers les RÉPONSES

Fonction conversion de température

  1. Définir une fonction convertir_temperature() qui prend comme paramètre une température en °C, et qui renvoie la valeur de cette température convertie en Fahrenheit.
  2. Écrire une suite instructions qui demande à l'utilisateur une valeur de température, qui appelle la fonction avec cet argument, et qui affiche le résultat qu'elle renvoie
def convertir_temperature(temp): pass

Lien vers les RÉPONSES

Fonction à l'envers

  1. Définir une fonction miroir() qui prend comme paramètre une chaîne de caractères, et qui renvoie la chaîne avec ses caractères en sens inverse.
  2. Écrire une suite instructions qui demande à l'utilisateur une chaîne de caractères, qui appelle la fonction avec cet argument, et qui affiche le résultat qu'elle renvoie
def miroir(chaine): pass

Lien vers les RÉPONSES

Call me taxi