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

.128013=21pPk/:hg7*i(dbeulrof)53_a4 nSvyctmsw050p0r0J0B0n0t0L0D0I0t0B0L0L0b010J0n0e010406050L0s0K0K0B0u0H040F0v0t0s0%0v0E050h0.0:0=0@0,0e040517101a0h170,0p0n0G0V0X0Z0#0j0n0k0j0t1o0j0J0*050Q0q0t0r1j0Y0!011n1p1r1p0J1x1z1v0J0u180J0j0V0`0L0e0B0E0#0c011B1l010w0S0r0E0B0K0r1v1U1W1#1D1(1z1+1-0*0a0D0f0u0v0e0v0L0n0}0E0D0O1S0u0u0r0I25101:0E180h1Q2i1N1P1O1w0p1=0#1r0E1*221v1g1i0W1C2s0n2u0E0v2y1v0e2b182g2i2M0-1V262A1$2F0u0;0t0*0d2f2Q0+2P1;2S1D2U2W0*0c2!1W2$2g2r012+0B2X040z2/2h0,2=2)0#2^2`0C2}2;2Q2?330*0y361b2K102y2l0p1P2q31010I2G1.183h193f2O112#053o0O2L383m0g0*0O0w3d301k1D0M0*0D3I3C3K320w0*0w0v0n0L0A0L0r0e0J3P2(3R010)040o3(2R3*0E0*0 3w2:2%3:2B3+0*0x363O3J3|3,0i36060D48413Q3|3=040H403`2?0v0*0b4g421$0K0n0*0l46494a3)3|3E042b0J0s0u3@2M4v3{2T3?4m4b1$4j040m4K4w4o4q044s3^2~2 4L2*3?0q0u4Q4H1D4N4l4W044G393U3W3Y3!3$3/2?3,3.4-4h3m4p3b4_3m3,3 4-0,0h3z0r2i2J5a3g1h3i2l2o2j0B1y5d0h3h570O0Q0S0L04.

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

.128013=21pPk/:hg*i(dbeulrof)53a4 nSvyctmsw050o0q0H0z0m0s0J0B0G0s0z0J0J0b010H0m0e010406050J0r0I0I0z0t0F040D0u0s0r0#0u0C050h0,0.0:0=0*0e0405150~180h150*0o0m0E0T0V0X0Z0j0m0k0j0s1m0j0H0(050O0p0s0q1h0W0Y011l1n1p1n0H1v1x1t0H0t160H0j0T0^0J0e0z0C0Z0c011z1j010v0Q0q0C0z0I0q1t1S1U1Z1B1$1x1)1+0(0a0B0f0t0u0e0u0J0m0{0C0B0M1Q0t0t0q0G230~1.0C160h1O2g1L1N1M1u0o1:0Z1p0C1(201t1e1g0U1A2q0m2s0C0u2w1t0e29162e2g2K0+1T242y1!2D0t0/0s0(0d2d2O0)2N1/2Q1B2S2U0(0c2Y1U2!2e2p012)0z2V040y2-2f0*2:2%0Z2?2^0A2{2/2O2;310(0x34192I0~2w2j0o1N2o2 010G2E1,163f173d2M0 2Z053m0M2J363k0g0(0M0v3b2~1i1B0K0(0B3G3A3I300v0(0G0:293N2$3P010%040n3W2P3Y0C0(0}3u2.2#3(2z3Z0(0w343M3H3;3!0i34060B403_3O3;0C0p0(2H2B0H3^3/2;3!3$3-2f4c3k3*043,2M3`1!0u0(0l0l3%2;0I0m2+4u3k3!3@4g0)41423X3;3C04290H0r0t4m2Z0B2}432R0(0z4b4o1B4q040b4X4T2(3S3U0q4z3Y4e4-3;4w394:1!4B3~4i3)4604480C4a4D4{3{0(4f4n4(304V4@1B4_4D0*0h3x0q2g2H5i3e1f3g2j2m2h0z1w5l0h3f5f0M0O0Q0J04.

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

.128013=21pPk/:hg*i(dbeulrof),x3-a nSvyctmsw050o0q0I0B0m0s0K0C0H0s0B0K0K0b010I0m0e010406050K0r0J0J0B0t0G040E0u0s0r0$0u0D050h0-0/0;0?0+0e0405160 190h160+0o0m0F0U0W0Y0!0j0m0k0j0s1n0j0I0)050P0p0s0q1i0X0Z011m1o1q1o0I1w1y1u0I0t170I0j0U0_0K0e0B0D0!0c011A1k010v0R0q0D0B0J0q1u1T1V1!1C1%1y1*1,0)0a0C0f0t0u0e0u0K0m0|0D0C0N1R0t0t0q0H240 1/0D170h1P2h1M1O1N1v0o1;0!1q0D1)211u1f1h0V1B2r0m2t0D0u2x1u0e2a172f2h2L0,1U252z1#2E0t0:0s0)0d2e2P0*2O1:2R1C2T2V0)0c2Z1V2#2f2q012*0B2W040z2.2g1a2J0 2x2k0o1O2p2(0!0H2F1-1731182 2N102!05380N2K2P2=0g0)0N0v2|3l2%1j1C0L0)0C3s2$2Q3v0!0D0v0)0K0u0/0q3A2;36010(040n3M3m3O0D0)0y3T3u2A3P0)0x3Z3C3#3W040G3)2=3Q0w3s3z3N3D3$040i3s060C3 3@3U3_3,0t3?3B2=0u0)0b463^3#0J0m2,3/3O49040l4i433X4n3#4k0A4q1#4f0)2{3g2/474j0)4m4z2}4d2S0)3.4F040C3~404B3_3o042a0I0r0t0~4L413!4I4T3}0 3j0q2h2I4+301g322k2n2i0B1x4.0h310+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

.128013=21pPk/:hg*i(dbeulrof)x3-a nSvyctmsw050o0q0H0A0m0s0J0B0G0s0A0J0J0b010H0m0e010406050J0r0I0I0A0t0F040D0u0s0r0#0u0C050h0,0.0:0=0*0e0405150~180h150*0o0m0E0T0V0X0Z0j0m0k0j0s1m0j0H0(050O0p0s0q1h0W0Y011l1n1p1n0H1v1x1t0H0t160H0j0T0^0J0e0A0C0Z0c011z1j010v0Q0q0C0A0I0q1t1S1U1Z1B1$1x1)1+0(0a0B0f0t0u0e0u0J0m0{0C0B0M1Q0t0t0q0G230~1.0C160h1O2g1L1N1M1u0o1:0Z1p0C1(201t1e1g0U1A2q0m2s0C0u2w1t0e29162e2g2K0+1T242y1!2D0t0/0s0(0d2d2O0)2N1/2Q1B2S2U0(0c2Y1U2g2H0q2g2w2j0o1N2o2%0Z0G2E1,162?172I2#2f2-352}0M2J2O2p010g0(0M0v363a2$1i1B0K0(0B3i343c0C0v0(0A0v1$2s3q2e3c0%040n3A3b2{010C0(0x3G3k2z013D0w3i3p3B3I3D0i3i060B3#3U3H3l0Z3e04290H0r0t0}0 2Z3%3O1!0I0m0(0y3N2P3)010u0(0l3~3s3L453I42040z48403`2W3Z0~382;19330h312h2^0~2k4r0A1w4k4n1f2!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

.128013=21pPk/+h:g*i(dbeulrof),wx3-4 nSvyctmsa050p0r0K0N0n0t0M0E0J0t0N0M0M0b010K0n0e010406050M0s0L0L0N0u0I040G0v0t0s0(0v0F050h0/0;0?0^0-0e040518111b0h180-0p0n0H0W0Y0!0$0j0n0l0j0t1p0j0K0+050R0q0t0r1k0Z0#011o1q1s1q0K1y1A1w0K0u190K0j0W0{0M0e0N0F0$0c011C1m010w0T0r0F0N0L0r1w1V1X1$1E1)1A1,1.0+0a0E0f0u0v0e0v0M0n0~0F0E0P1T0u0u0r0J26111;0F190h1R2j1O1Q1P1x0p1?0$1s0F1+231w1h1j0X1D2t0n2v0F0v2z1w0e2c192h2j2N0.1W272B1%2G0u0=0t0+0d2g2R0,2Q1=2T1E2V2X0+0c2#1X2%2h2s012,0N2Y040B2:2i0-2?2*0$2_2{0D2~2j2K0r2j2z2m0p1Q2r32010J2H1/193c1a2L2(2i37053j0P2M2R2@0g0+0P0w3s311l1E0z0+0E3D3x3h0F0w0+0L0I0M0K0r2c3K2)3F0$0*040o3W2S3Y2^0+0A3%2@3!0y3-3M0+0I3;3)3!0x0k37060E3 3J3E2C3*040s3^430v0+0b472U3+4c1E49040i4f333?3}40413L3)0F0+0H4k014h4b122$3q2@0L0n0+2}4z2;4B3h4h0m4v4s043,4H2 4o4J3)3z042c0K0s0u104R3w3X433!3$4%4U434O464-421%4h0C4N4t4v3`3}113u3a1c3p0h3n2k3e112n580N1z51541i2%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

.128013=21pPk+/:hg*i(dbeulrof)5xa nSvyctmsw050p0r0H0A0n0t0J0B0G0t0A0J0J0b010H0n0e010406050J0s0I0I0A0u0F040D0v0t0s0#0v0C050i0,0.0:0=0*0e0405150~180i150*0p0n0E0T0V0X0Z0k0n0l0k0t1m0k0H0(050O0q0t0r1h0W0Y011l1n1p1n0H1v1x1t0H0u160H0k0T0^0J0e0A0C0Z0c011z1j010w0Q0r0C0A0I0r1t1S1U1Z1B1$1x1)1+0(0a0B0f0u0v0e0v0J0n0{0C0B0M1Q0u0u0r0G230~1.0C160i1O2g1L1N1M1u0p1:0Z1p0C1(201t1e1g0U1A2q0n2s0C0v2w1t0e29162e2g2K0+1T242y1!2D0u0/0t0(0d2d2O0)2N1/2Q1B2S2U0(0c2Y1U2g2H0r2g2w2j0p1N2o2%0Z0G2E1,162?172I2#2f2-352}0M2J2O2p010g0(0M0w363a2$1i1B0K0(0B3i343c0C0w0(0/0w0|2b0n0|3q2e3c0%040o3C3b2{010C0(0z3I3k2z013F0x3i3p3D3K3F0j3i060B3%3W3J3l0Z3e04290H0s0u0}0 2Z3)3Q2R3N3P2P3+010v0(0m0m3}3c0I0n2+453K41040h4a3 470(0y3#0~382;19330i312h2^0~2k4u0A1w4n4q1f2!4q0N0P0R04.