AMU :: Polytech Biotech 3A :: JGB53D :: 2014/2015 :: Jacques van Helden, Denis Puthier, Nicolas Terrapon
Outre les instructions procédurales que vous avez découvert lors des scéances précédentes, les langages de programmation vous offrent la possibilité de créer vos propres fonctions. L'intérêt d'une fonction est de regrouper une série d'instructions que l'on souhaite répéter plus d'une fois dans un programme ou un projet. En remplaçant certaines parties de code par un appelle à une fonction dont le nom a été judicieusement choisi, on améliore aussi beaucoup la lisibilité du code.
La création d'une fonction se fait grâce au mot-clé def. Celui-ci est suivi du nom de la fonction et du caractère ":". On décrit ensuite les opérations qui doivent être effectuées par la fonction en marquant l'indentation. Python crée alors un objet function portant le nom choisi pour la fonction. Le programme python peut alors exécuter, ou appeler cette fonction.
##################################
## Exemple de fonction simple ##
##################################
def print_hello():
print("Hello!")
print_hello()
Hello!
##################################
## print_hello est un objet ##
## 'function'
##################################
type(print_hello)
function
Une fonction dépendent fréquemment de paramètres, ou arguments, nécessaires à la réalisation de la fonction mais qui peuvent varier lors des différents appels à cette fonction.
################################################
## Exemple de fonction simple avec arguments ##
################################################
def print_hello(n=10): # NOTEZ LE ":" et le mot clef "def"
print(n * "Hello!")
# Si on appelle print hello sans argument
# la chaîne de caracatère Hello est imprimé 10 fois
print_hello()
# on peut cependant modifier la valeur de l'argument
# lors de l'appelle de la fonction. Si on positionne
# n sur 5 alors Hello sera imprimé 5 fois.
print_hello(n=5)
# On peut éventuellement ne pas spécifier le nom de l'argument
# (Cf plus bas)
print_hello(5)
Hello!Hello!Hello!Hello!Hello!Hello!Hello!Hello!Hello!Hello! Hello!Hello!Hello!Hello!Hello! Hello!Hello!Hello!Hello!Hello!
##################################################
## La fonction peut avoir plusieurs arguments ##
##################################################
def print_mot(mot="Hello", n=5):
print(n * mot)
print_mot("foo", n=6)
foofoofoofoofoofoo
Une fonction est parfois créé pour manipuler des données et réaliser des calculs que l'on souhaite réutiliser par la suite. Dans ce cas, le simple affichage du résultat ne nous satisfera pas. On peut alors demander à la fonction de renvoyer son résultat avec le mot-clef return. Lors de l'appel à la fonction, ce résultat pourra alors être conserver dans une variable (par affectation). Finalement, Python permet de renvoyer plusieurs résultats sous la forme d'un tuple. Noter qu'une fonction peut renvoyer une liste ou un tuple permettant de renvoyer ainsi plusieurs éléments dans un objet.
###############################################
## Exemple de fonctions avec retour simple ##
###############################################
def return_mot(mot="foo", n=10, sep="-"):
return(sep.join(n * [mot])) # on substitue print par return
# Le résultat est renvoyé à l'écran
return_mot()
# Cependant, le résultat peut être renvoyé et stocké dans un variable
# Cette variable pourra être utilisé par la suite.
a = return_mot()
# Ici, le contenu est stocké dans a
print(a)
foo-foo-foo-foo-foo-foo-foo-foo-foo-foo
Dans une fonction, toute affectation à une variable revient à créer une nouvelle variable de portée locale (i.e connue dans l'environnement d'execution de la fonction mais pas dans l'environnement global).
##################################
## Exemple de variable locale ##
##################################
x = 100
def print_x_value():
x = 8 # x est défini localement
print("Valeur dans l'environnement de la fonction = ", x)
print_x_value()
print("Valeur dans l'environnement global = ", x)
Valeur dans l'environnement de la fonction = 8 Valeur dans l'environnement global = 100