Ceci est une ancienne révision du document !
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Table des matières
Fonctions : Définition et syntaxe Python
On a dit qu'un programme était la traduction d'un algorithme dans un langage de programmation. Ce n'est pas tout à fait exact. Il est plus juste de dire que le programme traduit un ensemble d'algorithmes, chaque algorithme réalisant une fonction. Un programme ordinaire est donc constitué de fonction chacune réalisant une petite partie du travail.
Quand les programmes sont très simples, il peut paraître inutile de s'embarrasser avec trop d'organisation. Mais notre but est d'apprendre de bonnes méthodes de façon à pouvoir plus tard envisager des programmes plus ambitieux. Le découpage du programme en fonction est alors INDISPENSABLE. D'ailleurs, l'essentiel de votre travail de programmation va vite être d'écrire des fonctions ou de les compléter.
Besoin d'organisation
Un programme mal écrit
Prenons un programme mal écrit :
x = int(input())
y = int(input())
a = x
b = y
while a % b != 0:
r = a % b
a = b
b = r
z = b
print(x//z)
print(y//z)
- Celui qui écrit le programme est encore dans son idée, il se comprend peut-être… mais dès qu'il oublie un peu, il ne se comprend plus lui-même !
- Pour un autre, la compréhension de ce programme demandera beaucoup d'efforts alors qu'il est très simple.
Le programmeur doit faire un effort de lisibilité !
Mieux nommer les variables
Les variables doivent être mieux nommées pour qu'on sache ce qu'elles signifient. On peut aussi rendre les print et input plus explicites.
num = int(input("Numérateur : "))
den = int(input("Dénominateur : "))
a = num
b = den
while a % b != 0:
r = a % b
a = b
b = r
d = b
print(f"Fraction réduite : {num//d}/{y//d}");
C'est un peu mieux.
Extraire la fonction
Le programme contient un calcul basé sur le while. On peut l'extraire pour le mettre en évidence.
def ma_fonction(a,b):
while a % b != 0:
r % b
a = b= a
b = r
return b
num = int(input("Numérateur : "))
den = int(input("Dénominateur : "))
d = ma_fonction(num, den)
print(f"Fraction réduite : {num//d}/{y//d}");
On peut améliorer les choses en nommant convenablement la fonction.
def pgcd(a,b):
while a % b != 0:
r % b
a = b= a
b = r
return b
num = int(input("Numérateur : "))
den = int(input("Dénominateur : "))
d = pgcd(num, den)
print(f"Fraction réduite : {num//d}/{y//d}");
Signature
def pgcd(a,b):
Cette ligne est la définition de la fonction. Elle indique le nom de la fonction et elle indique les entrées nécessaires.
principal
num = int(input("Numérateur : "))
den = int(input("Dénominateur : "))
d = pgcd(num, den)
print(f"Fraction réduite : {num//d}/{y//d}");
Ces lignes constituent la partie principale du programme. À la ligne 10 notamment, on appelle la fonction pgcd. C'est là qu'elle s'exécute.
Lors de la définition, avec def, la fonction ne s'exécute pas. Si dans un programme on ne fait que définir des fonctions, alors à l'exécution il ne fera rien.
Documenter la fonction
On appelle documentation le bloc de texte que l'on écrit sous la signature :
def pgcd(a, b):
"""
a: entier
b: entier non nul
renvoie le pgcd de a, b
"""
while a % b != 0:
r % b
a = b= a
b = r
return b
Vous devez documenter vos fonctions.
Typer
On peut indiquer dans la signature les types des entrées et sorties de la fonction. Ce n'est pas obligatoire et n'est pas exigé en NSI. C'est bien de le faire du moment que cela reste simple.
def pgcd(a:int,b:int) -> int:
...
Modulariser
On peut pousser l'organisation une étape plus loin en plaçant la fonction dans un module séparé.
# monmodumle.py
def pgcd(a:int, b:int) -> int:
"""
a: entier
b: entier non nul
renvoie le pgcd de a, b
"""
while a % b != 0:
r % b
a = b= a
b = r
return b
# main.py
from monmodule import pgcd
num = int(input("Numérateur : "))
den = int(input("Dénominateur : "))
d = pgcd(num, den)
print(f"Fraction réduite : {num//d}/{y//d}");
Ainsi, le principal est très lisible. On comprend en un coup d'œil ce qu'il fait.
Définition
Il s'agit d'un bloc de programme qui s'exécute sur demande. Lors de sa définition, on précise s'il faut lui fournir des entrées et s'il fournit en réponse des résultats en sortie.
Quand une fonction n'a pas de sortie, on peut la qualifier de procédure, même si ce terme technique n'a pas grande importance.
Une fonction traduit un algorithme
Reprenons l'exemple de l’algorithme de Al-Kwarizmi.
ENTRÉES : a et b, réels positifs
SORTIE : solution réelle positive de x^2 + a * x = b
DÉBUT
RENVOYER (racine(a^2 + 4*b) - a) / 2
FIN
Les termes entrées / sortie montrent bien la proximité entre les idées d'algorithme et de fonction.
Syntaxe Python
def extraire_solution(a, b):
return (sqrt(a**2 + 4*b) - a) / 2
- Le mot clé
defintroduit la définition, - La ligne de
defse termine par:, donc indentation après, returnest le mot-clé pourRENVOYER.
Notez au passage que le carré est noté**2en Python. Pour disposer de la fonctionsqrt(square-root = racine carrée) il faudra au préalable aller la chercher dans la bibliothèque de fonction mathématique :from math import sqrt.
En définissant la fonction, on lui donne un nom – ici extraire_solution – et on précise les entrées – ou arguments – ici a et b. La ligne de définition est appelée la signature de la fonction.
Bien nommer la fonction
Il faut choisir un nom expressif, pas f ou fonction qui ne disent rien. Le nom est choisi de façon à dire ce que fait la fonction. Ici, elle extrait la solution d'une équation, il est donc naturelle de l'appeler “extraire solution”. Mais on n'a pas le droit aux espaces dans les noms de variables ou de fonctions. Dans ces cas là, il existe des conventions pour harmoniser les pratiques.
Conventions pour les noms en plusieurs mots :
snake_case, la casse du serpent : tout en minuscule, mots séparés par_. Pour l'exempleextraire_solution. C'est la convention recommandée en Python.camelCase, la casse du chameau : changement de mot avec une majuscule. Pour l'exempleextraireSolution.
Commenter la fonction
Il est recommandé d'ajouter des commentaires juste après la signature de façon à expliciter l'usage de la fonction.
def extraire_solution(a, b):
"""
a, b: réels positifs
renvoie la solution réelle positive de l'équation x**2 + a x = b
"""
return (sqrt(a**2 + 4*b) - a) / 2
Typer entrées et sorties
On peut ajouter des informations de types sur les entrées et sorties. Ici, nous n'avons que des réels, ce que l'on notera float.
def extraire_solution(a:float, b:float) -> float:
"""
a, b: réels positifs
renvoie la solution réelle positive de l'équation x**2 + a x = b
"""
return (sqrt(a**2 + 4*b) - a) / 2
Préconditions
S'il est important de vérifier que les préconditions sont bien remplies, on peut forcer une vérification grâce au mot-clé assert.
En mathématique, une assertion est une déclaration que l'on tient pour vraie.
def extraire_solution(a:float, b:float) -> float:
"""
a, b: réels positifs
renvoie la solution réelle positive de l'équation x**2 + a x = b
"""
assert a >= 0
assert b >= 0
return (sqrt(a**2 + 4*b) - a) / 2
Exécution
Définir n'est pas exécuter
Si le programme entier est :
# ceci est la totalité du programme
def extraire_solution(a, b):
"""
a, b: réels positifs
renvoie la solution réelle positive de l'équation x**2 + a x = b
"""
return (sqrt(a**2 + 4*b) - a) / 2
Alors à l'exécution, ce programme ne fait rien. En lisant ce programme, l'interpréteur Python se contente de noter qu'une fonction nommée extraire_solution, demandant deux arguments, est définie des lignes 2 à 7.
Demande d'exécution
# ceci est la totalité du programme
def extraire_solution(a, b):
"""
a, b: réels positifs
renvoie la solution réelle positive de l'équation x**2 + a x = b
"""
return (sqrt(a**2 + 4*b) - a) / 2
x = extraire_solution(10, 39)
print(x)
- Ligne 2, l'interpréteur note qu'il y a une définition pour
extraire_solutionet passe à la suite, ligne 8. - Ligne 9, l'interpréteur exécute ce qui est à droite de
=:- fonction
extraire_solutionreconnue avec les arguments10et39 - exécution de la fonction, retour à la ligne 2 en prenant
a = 10etb = 39, - ligne 7, le calcul
(sqrt(a**2 + 4*b) - a) / 2donne3.0. La fonction renvoie3.0 - Retour à la ligne 9. L'exécution de la fonction a produit le nombre
3.0. Doncx = 3.0,
- ligne 10, l'affichage de
xconduit à l'affichage de3.0.
Les parenthèses sont signe de fonction
>>> z = 15 >>> z() TypeError: 'int' object is not callable
z est un nombre entier – int – mais le fait d'écrire ensuite z() fait que Python essaie de comprendre z comme une fonction. Un entier ne peut pas être appelé (called) comme une fonction, c'est le sens du message d'erreur.
