Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

le mot clé def

on définit une fonction avec le mot-clé def

132
10302
Help on function P in module __main__:

P(x)
    la fonction P implémente
    le polynôme
    que l'on étudie

syntaxe

en Python, les sauts de ligne et la présentation (indentation)
font partie de la syntaxe
c’est différent d’autres langages comme C++, Java, Javascript, ...
ce choix est fait pour augmenter la lisibilité
car on n’a alors pas besoin de sucre syntaxique comme begin .. end ou autres { .. }

syntaxe - illustration

c’est l’indentation qui détermine la structure
l’usage est d’indenter de 4 espaces
et de ne pas utiliser de tabulations (trop variables)

// en Javascript
// on écrirait
function foo(i) {
    if (i <= 0) {
        fonction1(i);
        fonction2(i);
    } else {
        fonction3(i);
    }
}
# en Python ce serait
def foo(i):
    if i <= 0:
        fonction1(i)
        fonction2(i)
    else:
        fonction3(i)

return

une fonction est censée retourner quelque chose

resultat = fonction(arguments)

avec return on indique ce qui est le résultat
l’exécution de la fonction s’arrête à ce moment-là
si pas de return, le retour est None

10
10
10

variables locales

à l’intérieur d’une fonction on peut naturellement utiliser des variables
la portée de ces variables est limitée à la fonction
ici les deux variables var sont des entités distinctes

dans def: var = 1
10
dans def: var = 1000
4321
'globale'

appels imbriqués / récursion

bien sûr dans le code d’une fonction
on peut appeler d’autres fonctions
y compris la fonction courante : fonction récursive (cf fact.py)

lorsque f appelle g,
f est en quelque sorte mise en suspens pendant l’exécution de g
du coup il est nécessaire de conserver où en est f

pile d’exécution

c’est le propos de la pile d’exécution
qui conserve la trace des appels imbriqués

illustrons cela avec https://pythontutor.com/
un site qui est très utile pour visualiser l’exécution de code simple

Loading...

exceptions

le mot-clé raise permet de lever une exception
cela a pour effet d’interrompre la fonction courante
et de dépiler les appels jusqu’à
trouver un except qui attrape l’exception

in time_bomb(1)
in time_bomb(0)
---------------------------------------------------------------------------
OverflowError                             Traceback (most recent call last)
Cell In[18], line 8
      4 def driver():
      5     time_bomb(1)
      6     print("will never pass here")
      7 
----> 8 driver()

Cell In[18], line 5, in driver()
      4 def driver():
----> 5     time_bomb(1)
      6     print("will never pass here")

Cell In[17], line 6, in time_bomb(n)
      3 def time_bomb(n):
      4     print(f"in time_bomb({n})")
      5     if n > 0:
----> 6         return time_bomb(n-1)
      7     else:
      8         raise OverflowError("BOOM")

Cell In[17], line 8, in time_bomb(n)
      4     print(f"in time_bomb({n})")
      5     if n > 0:
      6         return time_bomb(n-1)
      7     else:
----> 8         raise OverflowError("BOOM")

OverflowError: BOOM
uncaught
in time_bomb(2)
in time_bomb(1)
in time_bomb(0)
OOPS <class 'OverflowError'>, BOOM
will do this
try

clause except

passage d’arguments

les mécanismes de définition et de passage de paramètres sont assez complexes (cf cours avancé)
pour cette introduction disons simplement qu’on peut définir des paramètres optionnels :

obligatoire=100 optionnel=20
obligatoire=1000 optionnel=10

exercices - avancés

https://nbhosting.inria.fr/auditor/notebook/exos-mooc:exos/w4/w4-s3-x1-pgcd
https://nbhosting.inria.fr/auditor/notebook/exos-mooc:exos/w4/w4-s3-x4-power

écrire une fonction qui calcule la puissance entière

def power(x, n):
    """
    retourne x à la puissance n
    en O(log(n))
    """
    pass # votre code ici

écrire une fonction qui calcule de pgcd

def pgcd(a, b):
    """
    retourne le pgcd de a et b
    par convention on admet que
    pgcd(0, n) == pgcd(n, 0) = n
    """
    pass