Python, dans son jargon, appelle
cela un "callable object", objet appelable. C'est vrai que l'on
peut voir une fonction comme une
instance et appeler
des méthodes sur cette instance (mais,
c'est un usage avancé, non traité dans ce cours).
indique si cette fonction
possède ou nom des paramètres et
si oui en donne la liste.
La fonction fib2
possède un paramètre de
nom (dans le corps de la fonction, on
utilise la valeur de n pour contrôler la fin d'une boucle)
;
contient le caractère ":"
de façon
décalée sur la droite, associe un corps à la fonction.
Le corps contient les
instructions
qui seront exécutée à chaque fois que la fonction sera
appelée.
Le corps contient aussi
3 déclarations de variables locales result, a et b
(elles existent en autant d'exemplaires différents de
la fonction
qu'il y a d'appels)
Nulle part, il n'est question de type pour le
paramètre n, pour
les variables locales a, b et result et pour le résultat renvoyé
par l'exécution de la fonction. Python se
débrouille.
a et b sont initialisés avec des valeurs entières et on utilise
l'opérateur +. On peut déduire que a et b sont des entiers.
n est comparé à a. Le plus logique est que n soit un entier, mais on
peut comparer un entier avec un
réel!!!!
result est une liste, initialisée
avec la liste vide []. Et,
via la fonction append, on
y met des valeurs entières. On peut donc déduire que result est
une liste d'entiers et que
donc, la fonction rend une
liste d'entiers.
Tout ceci peut être écrit dans une docstring (chaine
de documentation entre 3 guillemets de chaque côté). Mais ce
n'est pas pour Python que la docString existe,
mais pour un être humain qui veut voir clair.
>>> def fib2(n) : # notez les : obligatoires
"""renvoie la liste des nombres
de Fibonnaci allant de 0 à n, non compris """
Notez que c'est de la responsabilité du programmeur de passe un
entier positif à
cette fonction.
factorielle(-3) et factorielle (1.2) contiennent une boucle
infinie
Une fonction peut avoir
0 ou plusieurs paramètres, rendre
0, 1 ou plusieurs résultats
1) J'ai oublié de mettre les parenthèses pour appeler une
fonction f sans
paramètres. J'ai
écrit f. Python ne m'a rien dit et est passé à l'exécution de
l'instruction
suivant. Pourquoi? Il aurait pu me dire qu'il y avait une erreur.