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):
# [ ... ]
rayon
rayon
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 None
return
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 |
####################