Donner un nom à un ensemble d’instructions pour créer de la modularité et de la sémantique
def ma_fonction(arg1, arg2):
instruction1
instruction2
...
return resultat
On peut ensuite utiliser la fonction avec les arguments souhaitées et récupérer le resultat :
mon_resultat = ma_fonction("pikachu", "bulbizarre")
autre_resultat = ma_fonction("salameche", "roucoups")
sqrt(2) -> 1.41421 (environ)
cos(3.1415) -> -1 (environ)
nom_du_departement(67) -> "Bas-rhin"
temperature_actuelle("Lyon") -> Va chercher une info sur internet et renvoie 12.5
int("3.14") -> 3
normalize_url("toto.com/pwet/") -> https://toto.com/pwet
sorted(liste_de_prenoms) -> renvoie la liste triée alphabétiquement
print("un message")
input("donne moi un chiffre entre 1 et 10 ?")
def aire_triangle(base, hauteur):
return base * hauteur / 2
A1 = aire_triangle(3, 5) # -> A1 vaut 15 !
A2 = aire_triangle(4, 2) # -> A2 vaut 8 !
def aire_disque(rayon):
rayon_carree = rayon ** 2
return 3.1415 * rayon_carree
A3 = aire_disque(6) # -> A3 vaut (environ) 113 !
def aire_triangle(base, hauteur):
return base * hauteur / 2
A1 = aire_triangle(3, 5) # -> A1 vaut 7.5 !
A2 = aire_triangle(4, 2) # -> A2 vaut 8 !
def aire_disque(rayon):
rayon_carree = rayon ** 2
return 3.1415 * rayon_carree
A3 = aire_disque(6) # -> A3 vaut (environ) 113
def volume_cylindre(rayon, hauteur):
return hauteur * aire_disque(rayon)
V1 = volume_cylindre(6, 4) # -> A4 vaut (environ) 452
def aire_disque(rayon):
rayon_carree = rayon ** 2
return 3.1415 * rayon_carree
def, :return (ou pas)def aire_disque(rayon):
# [ ... ]
rayonrayon en tant qu’argument de la fonction n’a de sens qu’a l’intérieur de cette fonction !rayon, par exemple: aire_disque(6).def aire_disque(rayon):
rayon_carree = rayon ** 2
# [ ... ]
rayon ou rayon_carree dans une autre fonction ou dans la portée globale (mais ce ne sont pas les mêmes entités)return def aire_disque(rayon):
rayon_carree = rayon ** 2
return 3.1415 * rayon_carree
return permet de récupérer le résultat de la fonctionA = aire_disque(6) (il y a effectivement un résultat à mettre dans A)return, elle renvoie Nonereturn quitte immédiatement la fonctionprint au lieu de return def aire_disque(rayon):
rayon_carree = rayon ** 2
return 3.1415 * rayon_carree
A = aire_disque(6) # A vaut bien quelque chose
# mais nous ne demandons pas de l'afficher ...
return par un print def aire_disque(rayon):
rayon_carree = rayon ** 2
print(3.1415 * rayon_carree) # Affiche le résultat dans la console
A = aire_disque(6) # Mais maintenant A vaut None
# car la fonction n'a pas utilisé `return`
def aire_disque(rayon):
rayon_carree = rayon ** 2
return 3.1415 * rayon_carree
A = aire_disque(6) # Stocker le résultat dans A
print(A) # Demander d'afficher A dans la console
Ceci dit, il peut être tout à fait légitime de mettre des print dans une fonction, par exemple pour la débugger…!
def aire_triangle(base, hauteur):
return base * hauteur / 2
A1 = aire_triangle(3, 5)
A2 = aire_triangle(4, hauteur=8)
A3 = aire_triangle(hauteur=6, base=2)
A4 = aire_triangle(hauteur=3, 2) # < Pas possible !
N.B. : cette écriture est aussi plus explicite / lisible / sémantique:
aire_triangle(base=3, hauteur=5)
que juste
aire_triangle(3, 5)
On peut se retrouver dans des situations comme:
base = 3
hauteur = 5
A1 = aire_triangle(base=base, hauteur=hauteur)
Dans l’appel de la fonction :
base est le nom de l’argument de la fonction aire_triangle,base corresponds au contenu de la variable nommée base.Les arguments peuvent être rendu optionnels si ils ont une valeur par défaut :
def distance(dx, dy=0, dz=0):
[...]
Dans ce cas, tous ces appels sont valides :
distance(5)
distance(2, 4)
distance(5, 8, 2)
distance(9, dy=5)
distance(0, dz=4)
distance(1, dy=1, dz=9)
distance(2, dz=4, dy=7)
subprocess.Popen(args,
bufsize=0,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=False,
shell=False,
cwd=None,
env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0)
c.f. https://docs.python.org/2/library/subprocess.html#subprocess.Popen
3.1 Écrire une fonction annee_naissance qui prends en argument un age et retourne l’année de naissance (+/- 1) sachant que nous sommes en 2019. Par exemple, annee_naissance(29) retounera l’entier 1990.
3.2
centrer prend en argument une chaîne de caractère, et retourne une nouvelle chaîne centrée sur 40 caractères. Par exemple print(centrer("Python")) affichera :| Python |
print(centrer("Python", 20)) affichera :| Python |
encadrer qui utilise la fonction centrer pour
produire un texte centré et encadré avec des ####. Par exemple,
print(encadrer("Python", 20)) affichera :####################
| Python |
####################