Aller au contenu

Les fonctions⚓︎

Définitions et premiers exemples⚓︎

fonction

Une fonction est un sous-programme qui rajoute une fonctionnalité à python. Elle comporte :

  • le nom d'appel de la fonction : qui ordonne à l'interpréteur d'exécuter la fonction
  • des paramètres d'entrée (des noms de variables) à prendre en compte ou à modifier
  • le corps de la fonction est l'ensemble des instructions du sous-programme
  • un renvoi de valeurs en sortie.

Important

Cliquez sur les + et prenez le temps de lire les commentaires !

syntaxe d'une fonction dans python
def nom_de_fontion(paramètres séparés par une vigule) :  # (1)!
    """ 
    les instructions à exécuter
    le cors de la fonction est indenté 
    à l'aide de la touche  ++tab++
    """ # (2)!
    return resultat(s) # (3)!
  1. ⚠ les deux points obligatoires.

  2. ⚠ même indentation pour toutes les lignes.

  3. ⚠ facultative mais recommandée.

L'instruction nom_de_fontion() avec les valeurs des paramètres d'entrée est un appel de fonction.

Un premier exemple

Exécuter le script ci-dessous. Rien ne se passe, c'est normal.
L'interpréteur a juste pris en compte la définition de la fonction fois_sept() de paramètre n.

Pour faire appel à la fonction on peut :

  1. Dans la console : saisir et valider l'appel de la fonction avec l'argument \(2\) :
    script console
    >>> fois_sept(5)
    
  2. Dans le script : créer une variable nommée nbr à laquelle vous affecterez la valeur renvoyée par la fonction fois_sept() avec l'argument \(5\). Exécuter et valider votre script.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013sopP5*d3y(:fS=eh)ivcm24r7l/k g_anw1tub050h0p0K0G0s0A0b0D0u0A0G0b0b0o010K0s0d010406050b0L0v0v0G0y0j040n0c0A0L0%0c0H050B0.0:0=0@0,0d040517101a0B170,0h0s0t0V0X0Z0#0q0s0E0q0A1o0q0K0*050Q0M0A0p1j0Y0!011n1p1r1p0K1x1z1v0K0y180K0q0V0`0b0d0G0H0#0w011B1l010m0S0p0H0G0v0p1v1U1W1#1D1(1z1+1-0*0a0D0e0y0c0d0c0b0s0}0H0D0O1S0y0y0p0u25101:0H180B1Q2i1N1P1O1w0h1=0#1r0H1*221v1g1i0W1C2s0s2u0H0c2y1v0d2b182g2i2M0-1V262A1$2F0y0;0A0*0J2f2Q0+2P1;2S1D2U2W0*0w2!1W2$2g2r012+0G2X040i2/2h0,2=2)0#2^2`0x2}2;2Q2?330*0f361b2K102y2l0h1P2q31010u2G1.183h193f2O112#053o0O2L383m0C0*0O0m3d301k1D0I0*0D3I3C3K320m0*0m0c0s0b0F0b0p0d0K3P2(3R010)040k3(2R3*0H0*0 3w2:2%3:2B3+0*0r363O3J3|3,0l36060D48413Q3|3=040j403`2?0c0*0o4g421$0v0s0*0z46494a3)3|3E042b0K0L0y3@2M4v3{2T3?4m4b1$4j040g4K4w4o4q044s3^2~2 4L2*3?0M0y4Q4H1D4N4l4W044G393U3W3Y3!3$3/2?3,3.4-4h3m4p3b4_3m3,3 4-0,0B3z0p2i2J5a3g1h3i2l2o2j0G1y5d0B3h570O0Q0S0b04.

paramètre et argument

Dans l'exemple précédent, la fonction fois_sept() a pour paramètre la variable n.

Dans l'appel fois_sept(5), \(5\) est l'argument de la fonction. Il renvoie la valeur \(35\).

fonction sans résultat renvoyé

La fonction carre() ci-dessous :

  • prend pour paramètre n,
  • affiche le carré de n
  • ne renvoie rien.

  • Exécuter le script suivant.

  • Vérifier à l'aide d'une instruction print() que la variable a contient None (rien).

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013sopP5*d3y(:fS=eh)ivcm24rl/k ganw1tub050h0p0I0E0s0z0b0C0u0z0E0b0b0o010I0s0d010406050b0J0v0v0E0y0j040n0c0z0J0#0c0F050A0,0.0:0=0*0d0405150~180A150*0h0s0t0T0V0X0Z0q0s0D0q0z1m0q0I0(050O0K0z0p1h0W0Y011l1n1p1n0I1v1x1t0I0y160I0q0T0^0b0d0E0F0Z0w011z1j010m0Q0p0F0E0v0p1t1S1U1Z1B1$1x1)1+0(0a0C0e0y0c0d0c0b0s0{0F0C0M1Q0y0y0p0u230~1.0F160A1O2g1L1N1M1u0h1:0Z1p0F1(201t1e1g0U1A2q0s2s0F0c2w1t0d29162e2g2K0+1T242y1!2D0y0/0z0(0H2d2O0)2N1/2Q1B2S2U0(0w2Y1U2!2e2p012)0E2V040i2-2f0*2:2%0Z2?2^0x2{2/2O2;310(0f34192I0~2w2j0h1N2o2 010u2E1,163f173d2M0 2Z053m0M2J363k0B0(0M0m3b2~1i1B0G0(0C3G3A3I300m0(0u0:293N2$3P010%040k3W2P3Y0F0(0}3u2.2#3(2z3Z0(0r343M3H3;3!0l34060C403_3O3;0F0K0(2H2B0I3^3/2;3!3$3-2f4c3k3*043,2M3`1!0c0(0g0g3%2;0v0s2+4u3k3!3@4g0)41423X3;3C04290I0J0y4m2Z0C2}432R0(0E4b4o1B4q040o4X4T2(3S3U0p4z3Y4e4-3;4w394:1!4B3~4i3)4604480F4a4D4{3{0(4f4n4(304V4@1B4_4D0*0A3x0p2g2H5i3e1f3g2j2m2h0E1w5l0A3f5f0M0O0Q0b04.

Warning

Une fonction qui renvoie rien en sortie s'appelle une procédure.
Le langage Python ne fait pas de différence dans la syntaxe entre fonction et procédure.
Il vaut par la suite rajouter une instruction return pour bien visualiser la fin de la fonction. Les résultats créés par la fonction et non renvoyé par une commande return sont effacés de la mémoire.

gérer l'indentation

La fonction somme() doit :

  • prendre pour paramètres x et y,
  • renvoyer le résultat de 2x-3y.

  • Exécuter le script. Une erreur IndentationError est signalée.

  • Selectionner les lignes 2 et 3, puis appuyer sur la touche Tab pour corriger l'indentation, et relancer le script.
  • Saisir dans la console >>>somme(3,4). Une erreur TypeError est signalée.
  • Rajouter l'argument y dans la fonction somme(). Relancer et valider le script.
  • Créer une variable a et lui affecter la valeur renvoyée par somme(0,2)
  • Créer une variable b et lui affecter la valeur renvoyée par somme(2,0)
  • Que renvoie la comparaison a != b ?

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013sopP-*d3y(:fS=eh)iv,cm2rxl/k ganw1tub050h0p0J0F0s0A0b0D0v0A0F0b0b0o010J0s0d010406050b0K0w0w0F0y0j040n0c0A0K0$0c0G050B0-0/0;0?0+0d0405160 190B160+0h0s0t0U0W0Y0!0q0s0E0q0A1n0q0J0)050P0L0A0p1i0X0Z011m1o1q1o0J1w1y1u0J0y170J0q0U0_0b0d0F0G0!0x011A1k010m0R0p0G0F0w0p1u1T1V1!1C1%1y1*1,0)0a0D0e0y0c0d0c0b0s0|0G0D0N1R0y0y0p0v240 1/0G170B1P2h1M1O1N1v0h1;0!1q0G1)211u1f1h0V1B2r0s2t0G0c2x1u0d2a172f2h2L0,1U252z1#2E0y0:0A0)0I2e2P0*2O1:2R1C2T2V0)0x2Z1V2#2f2q012*0F2W040i2.2g1a2J0 2x2k0h1O2p2(0!0v2F1-1731182 2N102!05380N2K2P2=0C0)0N0m2|3l2%1j1C0H0)0D3s2$2Q3v0!0G0m0)0b0c0/0p3A2;36010(040k3M3m3O0G0)0z3T3u2A3P0)0u3Z3C3#3W040j3)2=3Q0r3s3z3N3D3$040l3s060D3 3@3U3_3,0y3?3B2=0c0)0o463^3#0w0s2,3/3O49040g4i433X4n3#4k0f4q1#4f0)2{3g2/474j0)4m4z2}4d2S0)3.4F040D3~404B3_3o042a0J0K0y0~4L413!4I4T3}0 3j0p2h2I4+301g322k2n2i0F1x4.0B310+4{0O0Q0S04.

Coeur

Pour une fonction avec plusieurs paramètres, l'ordre dans lequel les arguments sont donnés est important.

QCM⚓︎

Je vérifie ma compréhension (bouton en bas pour recommencer)

  1. Soit la fonction suivante :
    🐍 Script Python
    1
    2
    3
    def mafonction(  a ) :
        b = a**2 + 3 * a + 2
        return b 
    

    L'appel mafonction(1) renvoie :

    • 6

    • 7

    • None

    • rien

  2. Soit la fonction suivante :
    🐍 Script Python
    1
    2
    3
    def mafonction ( a ) :
        b = a**2 - 3 * a + 2
        print( b )    
    

    L'appel mafonction(2) renvoie :

    • 0

    • 0.0

    • None

    • rien

  3. Soit la fonction suivante :
    🐍 Script Python
    1
    2
    3
    def mafonction(b , a) :
        return 2 * a + b   
    c = mafonctionC(2**3 ,2+3 )   
    

    La variable c a pour valeur :

    • 16

    • 17

    • 18

    • 21

  4. Soit la fonction suivante :
    🐍 Script Python
    1
    2
    def f(a , b ,x) :
        return a*x+b  
    

    L'appel f(2,3,4) renvoie :

    • 10

    • 11

    • 14

    • 0

  5. Soit la fonction suivante :
    🐍 Script Python
    1
    2
    def f(a , b ,x) :
        return a*x+b  
    

    La comparaison f(2,1,3)==7 renvoie :

    • True

    • ``#!python False

  6. Soit le script suivant :
    🐍 Script Python
    1
    2
    3
    4
    5
    def hi (a, b):
        return a * b
    
    def hello (a, b):
        return a + b
    

    L'appel hi(2, 2) + hello(3, 3) renvoie la valeur :

    • 8

    • 8

    • 10

    • 11

  7. Soit le script suivant :
    🐍 Script Python
    1
    2
    3
    4
    5
    6
    7
    def hi (a, b):
        return a * b
    
    def hello (a, b):
        return a + b
    
    a = hi( 1, 2)
    

    L'appel hello(a, 1) renvoie la valeur :

    • 1

    • 2

    • 3

    • 4

  8. Soit le script suivant :
    🐍 Script Python
    1
    2
    3
    4
    5
    def hi (a, b):
        return a * b
    
    def hello (a, b):
        return a + b
    

    L'appel hello(hi(3, 2), 4) renvoie la valeur :

    • 10

    • 11

    • 20

    • 24

  9. Soit le script suivant :
    🐍 Script Python
    1
    2
    3
    4
    5
    def hi (a, b):
        return a * b
    
    def hello (a, b):
        return hi(a, b + 1)
    

    L'appel hello(2, 2) renvoie la valeur :

    • 4

    • 5

    • 6

    • 8

Exercices⚓︎

Exercice 1

Compléter le script ci-dessous de la fonction d'appel affine() :

  • de paramètre x
  • qui renvoie 3*x-1

Valider votre réponse (Ctrl+Enter) et lire la solution.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013sopP-*d3y(:fS=eh)ivcm2rxl/k ganw1tub050h0p0I0E0s0z0b0C0u0z0E0b0b0o010I0s0d010406050b0J0v0v0E0x0j040n0c0z0J0#0c0F050A0,0.0:0=0*0d0405150~180A150*0h0s0t0T0V0X0Z0q0s0D0q0z1m0q0I0(050O0K0z0p1h0W0Y011l1n1p1n0I1v1x1t0I0x160I0q0T0^0b0d0E0F0Z0w011z1j010m0Q0p0F0E0v0p1t1S1U1Z1B1$1x1)1+0(0a0C0e0x0c0d0c0b0s0{0F0C0M1Q0x0x0p0u230~1.0F160A1O2g1L1N1M1u0h1:0Z1p0F1(201t1e1g0U1A2q0s2s0F0c2w1t0d29162e2g2K0+1T242y1!2D0x0/0z0(0H2d2O0)2N1/2Q1B2S2U0(0w2Y1U2g2H0p2g2w2j0h1N2o2%0Z0u2E1,162?172I2#2f2-352}0M2J2O2p010B0(0M0m363a2$1i1B0G0(0C3i343c0F0m0(0E0m1$2s3q2e3c0%040k3A3b2{010F0(0y3G3k2z013D0r3i3p3B3I3D0l3i060C3#3U3H3l0Z3e04290I0J0x0}0 2Z3%3O1!0v0s0(0i3N2P3)010c0(0g3~3s3L453I42040f48403`2W3Z0~382;19330A312h2^0~2k4r0E1w4k4n1f2!4n0N0P0R04.
Exercice 2

Compléter le script ci-dessous de la fonction d'appel mystere() :

  • de paramètres x et y
  • calcule u = x + y
  • calcule v = 3*x
  • renvoie u-v

Valider votre réponse (Ctrl+Enter) et lire la solution.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013sopP-*db3y(f:S=eh)iv+,cm24rxlk ganw1tu/050h0q0L0H0t0D0b0F0x0D0H0b0b0p010L0t0d010406050b0M0y0y0H0B0k040o0c0D0M0(0c0I050N0/0;0?0^0-0d040518111b0N180-0h0t0u0W0Y0!0$0r0t0G0r0D1p0r0L0+050R0i0D0q1k0Z0#011o1q1s1q0L1y1A1w0L0B190L0r0W0{0b0d0H0I0$0z011C1m010m0T0q0I0H0y0q1w1V1X1$1E1)1A1,1.0+0a0F0e0B0c0d0c0b0t0~0I0F0P1T0B0B0q0x26111;0I190N1R2j1O1Q1P1x0h1?0$1s0I1+231w1h1j0X1D2t0t2v0I0c2z1w0d2c192h2j2N0.1W272B1%2G0B0=0D0+0K2g2R0,2Q1=2T1E2V2X0+0z2#1X2%2h2s012,0H2Y040j2:2i0-2?2*0$2_2{0A2~2j2K0q2j2z2m0h1Q2r32010x2H1/193c1a2L2(2i37053j0P2M2R2@0E0+0P0m3s311l1E0J0+0F3D3x3h0I0m0+0y0k0b0L0q2c3K2)3F0$0*040l3W2S3Y2^0+0C3%2@3!0w3-3M0+0k3;3)3!0s0n37060F3 3J3E2C3*040M3^430c0+0p472U3+4c1E49040v4f333?3}40413L3)0I0+0u4k014h4b122$3q2@0y0t0+2}4z2;4B3h4h0g4v4s043,4H2 4o4J3)3z042c0L0M0B104R3w3X433!3$4%4U434O464-421%4h0f4N4t4v3`3}113u3a1c3p0N3n2k3e112n580H1z51541i2%540Q0S0U04.
Exercice 3

Écrire le script d'une fonction d'appel mafonction():

  • prend pour paramètre x
  • renvoie la somme de son carré et de \(5\)

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013sopP*5dy(:fS=eh)iv+cm2rxl/k ganw1tub050h0o0I0E0r0z0b0C0u0z0E0b0b0n010I0r0d010406050b0J0v0v0E0x0i040m0c0z0J0#0c0F050A0,0.0:0=0*0d0405150~180A150*0h0r0s0T0V0X0Z0p0r0D0p0z1m0p0I0(050O0K0z0o1h0W0Y011l1n1p1n0I1v1x1t0I0x160I0p0T0^0b0d0E0F0Z0w011z1j010l0Q0o0F0E0v0o1t1S1U1Z1B1$1x1)1+0(0a0C0e0x0c0d0c0b0r0{0F0C0M1Q0x0x0o0u230~1.0F160A1O2g1L1N1M1u0h1:0Z1p0F1(201t1e1g0U1A2q0r2s0F0c2w1t0d29162e2g2K0+1T242y1!2D0x0/0z0(0H2d2O0)2N1/2Q1B2S2U0(0w2Y1U2g2H0o2g2w2j0h1N2o2%0Z0u2E1,162?172I2#2f2-352}0M2J2O2p010B0(0M0l363a2$1i1B0G0(0C3i343c0F0l0(0/0l0|2b0r0|3q2e3c0%040j3C3b2{010F0(0y3I3k2z013F0q3i3p3D3K3F0k3i060C3%3W3J3l0Z3e04290I0J0x0}0 2Z3)3Q2R3N3P2P3+010c0(0f0f3}3c0v0r2+453K41040t4a3 470(0g3#0~382;19330A312h2^0~2k4u0E1w4n4q1f2!4q0N0P0R04.