import%20marimo%0A%0A__generated_with%20%3D%20%220.24.2%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Fonctions%20et%20port%C3%A9e%20des%20variables%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%201.%20Fonctions%0A%0A%20%20%20%20%23%23%23%201.1.%20G%C3%A9n%C3%A9ralit%C3%A9s%0A%0A%20%20%20%20En%20Python%2C%20les%20_fonctions_%20sont...%20des%20variables!%20On%20peut%20donc%20leur%20affecter%20une%20valeur.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20type(max)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.2.%20Syntaxe%2C%20ex%C3%A9cution%20et%20anatomie%20d'une%20fonction%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Entr%C3%A9es%20et%20sorties%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20-%20Un%20_argument_%20(ou%20param%C3%A8tre)%20d%E2%80%99une%20fonction%20est%20une%20valeur%20pass%C3%A9e%20%C3%A0%20la%20fonction%20comme%20une%20entr%C3%A9e%20(_input_%20en%20anglais).%20Il%20y%20a%20des%20fonctions%20qui%20ne%20prennent%20pas%20d%E2%80%99arguments%20et%20d%E2%80%99autres%20qui%20en%20prennent%20autant%20que%20l%E2%80%99on%20souhaite.%0A%20%20%20%20-%20%C3%80%20la%20fin%20de%20l%E2%80%99ex%C3%A9cution%20d%E2%80%99une%20fonction%2C%20celle-ci%20retourne%20une%20valeur%20comme%20une%20sortie%20(_output_).%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20Le%20d%C3%A9roulement%20de%20l%E2%80%99ex%C3%A9cution%20d%E2%80%99une%20fonction%20se%20fait%20en%20trois%20%C3%A9tapes%20%3A%0A%20%20%20%201.%20La%20fonction%20est%20appel%C3%A9e%20et%20tous%20les%20arguments%20sont%20pass%C3%A9s%20%C3%A0%20la%20fonction%20comme%20des%20entr%C3%A9es.%0A%20%20%20%202.%20La%20fonction%20s'ex%C3%A9cute%3A%20des%20actions%20sont%20r%C3%A9alis%C3%A9es%20avec%20les%20arguments.%0A%20%20%20%203.%20La%20fonction%20retourne%20une%20valeur%2C%20et%20l%E2%80%99appel%20de%20la%20fonction%20est%20remplac%C3%A9%20par%20la%20valeur%20retourn%C3%A9e.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20taille%20%3D%20len(%22Python%22)%0A%20%20%20%20print(taille)%20%23%20retourne%206%20%3A%20l'appel%20de%20la%20fonction%20est%20remplac%C3%A9%20par%20la%20valeur%20retourn%C3%A9e%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Side-effects%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Il%20existe%20des%20fonctions%20qui%20ne%20retournent%20rien%20et%2Fou%20qui%20modifient%20des%20donn%C3%A9es%20ext%C3%A9rieures.%20L'arch%C3%A9type%20est%20la%20fonction%20%60print()%60%2C%20qui%20ne%20renvoie%20rien%20mais%20affiche%20l'argument.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20valeur_retourn%C3%A9e%20%3D%20print(%22Quelle%20est%20la%20valeur%20que%20je%20retourne%20%3F%22)%0A%20%20%20%20print(valeur_retourn%C3%A9e)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Une%20fonction%20est%20compos%C3%A9e%20de%20deux%20parties%20principales%3A%0A%20%20%20%20-%20Une%20_signature_%3A%20son%20nom%20et%20tous%20les%20arguments%20qui%20lui%20sont%20n%C3%A9cessaires.%0A%20%20%20%20-%20Un%20_corps_%20%3A%20les%20instructions%20qui%20la%20composent%20et%20qui%20sont%20ex%C3%A9cut%C3%A9es%20%C3%A0%20chaque%20appel.%0A%0A%20%20%20%20La%20d%C3%A9finition%20d'une%20fonction%20se%20fait%20%C3%A0%20l'aide%20du%20mot-cl%C3%A9%20%60def%60%20pour%20d%C3%A9finir%20la%20signature%20de%20la%20fonction%2C%20le%20corps%20%C3%A9tant%20ensuite%20d%C3%A9limit%C3%A9%20%C3%A0%20l'aide%20d'une%20tabulation.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20addition(a%2Cb)%3A%20%23%20signature%20de%20la%20fonction%0A%20%20%20%20%20%20%20%20%23%20corps%20de%20la%20fonction%0A%20%20%20%20%20%20%20%20somme%20%3D%20a%20%2B%20b%0A%20%20%20%20%20%20%20%20return%20somme%20%23%20tr%C3%A8s%20important%20de%20retourner%20quelque%20chose%20si%20on%20ne%20veut%20pas%20le%20perdre%20une%20fois%20la%20fonction%20ex%C3%A9cut%C3%A9e!%0A%0A%20%20%20%20def%20addition_noreturn(a%2Cb)%3A%0A%20%20%20%20%20%20%20%20somme%20%3D%20a%20%2B%20b%20%0A%20%20%20%20%20%20%20%20print(%22La%20somme%20vaut%22%2C%20somme)%0A%20%20%20%20%20%20%20%20%23%20mince%20j'ai%20oubli%C3%A9%20le%20return%2C%20la%20fonction%20s'ex%C3%A9cute%20quand%20m%C3%AAme%20(le%20print%20s'affichage)%20mais%20ne%20retourne%20rien...%0A%0A%20%20%20%20a%20%3D%2012%0A%20%20%20%20b%20%3D%2036%0A%20%20%20%20c%20%3D%20addition(a%2Cb)%0A%20%20%20%20d%20%3D%20addition_noreturn(a%2Cb)%0A%20%20%20%20print(%22c%20%3D%22%2C%20c)%0A%20%20%20%20print(%22d%20%3D%22%2C%20d)%0A%20%20%20%20return%20(addition%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20%60return%60%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Comme%20le%20montre%20l'exemple%20ci-dessus%2C%20%60return%60%20n'est%20pas%20n%C3%A9cessaire%20pour%20qu'une%20fonction%20s'ex%C3%A9cute.%20En%20revanche%2C%20il%20est%20n%C3%A9cessaire%20si%20l'on%20souhaite%20que%20la%20fonction%20retourne%20une%20valeur.%20De%20plus%2C%20une%20fois%20%60return%60%20rencontr%C3%A9%2C%20le%20reste%20du%20corps%20de%20la%20fonction%20situ%C3%A9%20_apr%C3%A8s_%20n'est%20pas%20ex%C3%A9cut%C3%A9.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20fonction_test(a)%3A%0A%20%20%20%20%20%20%20%20print(%22L'argument%20a%20vaut%22%2C%20a)%0A%20%20%20%20%20%20%20%20return%20True%0A%20%20%20%20%20%20%20%20print(%22Ce%20texte%20ne%20s'affichera%20pas...%22)%0A%0A%20%20%20%20t%20%3D%20fonction_test(15)%0A%20%20%20%20print(t)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Depuis%20le%20d%C3%A9but%20de%20ce%20cours%2C%20on%20a%20en%20fait%20d%C3%A9j%C3%A0%20fait%20appel%20%C3%A0%20un%20certain%20nombre%20de%20fonctions...%20De%20fa%C3%A7on%20g%C3%A9n%C3%A9rale%2C%20l%E2%80%99appel%20d%E2%80%99une%20fonction%20d%C3%A9finie%20se%20fait%20en%20%C3%A9crivant%20le%20nom%20de%20la%20fonction%2C%20suivis%20des%20arguments%20entre%20parenth%C3%A8ses.%20Bien%20s%C3%BBr%2C%20l%E2%80%99appel%20ne%20peut%20se%20faire%20qu%E2%80%99apr%C3%A8s%20la%20d%C3%A9finition%20de%20la%20fonction.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(addition)%3A%0A%20%20%20%20x%2C%20y%20%3D%201%2C%2017%0A%20%20%20%20z%20%3D%20addition(x%2Cy)%20%23%20Appel%20de%20la%20fonction%20'addition'%20d%C3%A9finie%20pr%C3%A9c%C3%A9demment%2C%20avec%20affection%20dans%20la%20variable%20z%0A%20%20%20%20print(%22La%20somme%20de%20%22%2C%20x%2C%20%22%20et%20%22%2C%20y%2C%20%22%20vaut%20%22%2C%20z)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20%60None%60%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20Une%20fonction%20peut%20ne%20pas%20voir%20d%E2%80%99arguments%20et%20ne%20pas%20retourner%20une%20valeur.%20Dans%20ce%20dernier%20cas%2C%20la%20fonction%20renvoie%20en%20r%C3%A9alit%C3%A9%20%60None%60%20et%20se%20comporte%20comme%20une%20proc%C3%A9dure.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20salutation(nom)%20%3A%0A%20%20%20%20%20%20%20%20print(%22Bonjour%20%22%2C%20nom%2C%20%22!%22)%0A%0A%20%20%20%20salutation(%22Antoine%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20print_erreur()%20%3A%0A%20%20%20%20%20%20%20%20print(%22Erreur%20dans%20le%20programme%22)%0A%20%20%20%20print_erreur()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20operations(a%2C%20b)%20%3A%0A%20%20%20%20%20%20%20%20return%20a%2Bb%2C%20a*b%2C%20a-b%0A%20%20%20%20x1%2C%20x2%20%3D%202%2C%20-6%0A%20%20%20%20q%2C%20r%2C%20s%20%3D%20operations(x1%2C%20x2)%20%23%20noter%20l'affectation%20multiple%20!%0A%20%20%20%20print(q%2C%20r%2C%20s)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.3.%20Arguments%0A%0A%20%20%20%20On%20explore%20dans%20cette%20section%20les%20diverses%20possibilit%C3%A9s%20pour%20les%20arguments%20d'une%20fonction.%20Commen%C3%A7ons%20par%20remarquer%20qu'il%20est%20possible%20de%20donner%20des%20valeurs%20par%20d%C3%A9faut%20aux%20arguments%20dans%20la%20signature%20de%20la%20fonction.%20Ainsi%20on%20peut%2C%20lors%20de%20l%E2%80%99appel%2C%20omettre%20de%20sp%C3%A9cifier%20certains%20arguments%20qui%20prendront%20alors%20la%20valeur%20par%20d%C3%A9faut.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20accueil(nom%2C%20prenom%2C%20dpt%3D%22Math%C3%A9matiques%22%2C%20sem%3D%22S1%22)%3A%0A%20%20%20%20%20%20%20%20print(prenom%2C%20nom%2C%20%22%7C%20D%C3%A9partement%3A%22%2C%20dpt%2C%20%22%7C%20Semestre%3A%22%2C%20sem)%0A%0A%20%20%20%20accueil(%22Dupont%22%2C%20%22Antoine%22)%0A%20%20%20%20accueil(%22Dupont%22%2C%20%22Antoine%22%2C%20%22Rugby%22)%0A%20%20%20%20accueil(%22Dupont%22%2C%20%22Antoine%22%2C%20sem%3D%22S3%22)%20%23%20on%20ne%20donne%20pas%20le%20troisi%C3%A8me%20argument%20%60dpt%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20il%20faut%20donc%20sp%C3%A9cifier%20%C3%A0%20quel%20argument%20on%20donne%20la%20valeur%20%60S3%60%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Valeur%20par%20d%C3%A9faut%20et%20mutabilit%C3%A9%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Si%20un%20mutable%20pass%C3%A9%20en%20argument%20par%20d%C3%A9faut%2C%20l%E2%80%99%C3%A9tat%20de%20cette%20variable%20est%20conserv%C3%A9!%20Pour%20les%20arguments%20%C3%A0%20valeur%20par%20d%C3%A9faut%2C%20il%20vaut%20mieux%20que%20cela%20soit%20sur%20des%20types%20non-mutables%20(%60int%60%2C%20%60float%60%2C%20%60str%60%2C%20%60bool%60%2C%20%60tuple%60).%20Une%20fa%C3%A7on%20de%20passer%20quand%20m%C3%AAme%20des%20arguments%20par%20d%C3%A9faut%20qui%20sont%20mutables%20est%20de%20faire%20un%20test%20en%20d%C3%A9but%20de%20fonction%20avant%20mutation.%0A%20%20%20%20%60%60%60%0A%20%20%20%20def%20maFonction(liste%3DNone)%3A%0A%20%20%20%20%20%20%20%20if%20liste%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20liste%20%3D%20%5B1%2C%203%5D%20%23%20c'est%20l%C3%A0%20qu'on%20met%20la%20valeur%20par%20d%C3%A9faut%0A%20%20%20%20%23%20etc%20etc%0A%20%20%20%20%60%60%60%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20test(x%20%3D%20%5B%20%5D)%3A%0A%20%20%20%20%20%20%20%20x.append(7)%0A%20%20%20%20%20%20%20%20return%20x%0A%0A%20%20%20%20var_mut%20%3D%20%5B62%5D%0A%20%20%20%20print(var_mut)%0A%20%20%20%20xx%20%3D%20test(var_mut)%0A%20%20%20%20print(xx)%0A%20%20%20%20print(var_mut)%20%23%20var_mut%20a%20chang%C3%A9%20!!%0A%20%20%20%20return%20(test%2C)%0A%0A%0A%40app.cell%0Adef%20_(test)%3A%0A%20%20%20%20print(test())%20%23%20%5B7%5D%0A%20%20%20%20print(test(%5B6%5D))%20%23%20%5B6%2C%207%5D%0A%20%20%20%20print(test())%20%23%20%5B7%2C%207%5D%0A%20%20%20%20print(test())%20%23%20%5B7%2C%207%2C%207%5D%20!!%20%3Ao%20!!%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20test_mut(x%20%3D%20None)%3A%0A%20%20%20%20%20%20%20%20if%20x%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20x%20%3D%20%5B1%2C%203%5D%0A%20%20%20%20%20%20%20%20x.append(8)%0A%20%20%20%20%20%20%20%20return%20x%0A%0A%20%20%20%20var%20%3D%20%5B31%5D%0A%20%20%20%20print(var)%0A%20%20%20%20retour%20%3D%20test_mut(var)%0A%20%20%20%20print(retour)%0A%20%20%20%20print(var)%20%23%20var_mut%20est%20quand%20m%C3%AAme%20modifi%C3%A9e%0A%0A%20%20%20%20%23%20mais%20la%20fonction%20renvoie%20toujours%20la%20m%C3%AAme%20valeur%0A%20%20%20%20print(test_mut())%0A%20%20%20%20print(test_mut())%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20peut%20avoir%20un%20nombre%20d%E2%80%99arguments%20_arbitraire_%20par%20passage%20d%E2%80%99un%20tuple.%20Cela%20est%20fait%20avec%20la%20notation%20%60*nom%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20somme(*args)%3A%0A%20%20%20%20%20%20%20%20res%20%3D%200%0A%20%20%20%20%20%20%20%20for%20nombre%20in%20args%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20res%20%2B%3D%20nombre%0A%20%20%20%20%20%20%20%20return%20res%0A%0A%20%20%20%20print(somme(10))%0A%20%20%20%20print(somme(10%2C%2020%2C%2030))%0A%20%20%20%20print(somme(10%2C%2020%2C%2030%2C%2040))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Tuples%20et%20arguments%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20On%20peut%20passer%20un%20tuple%20en%20argument%20lors%20de%20l%E2%80%99appel%20en%20utilisant%20%60*nomTuple%60%20%3A%20cela%20%22d%C3%A9compose%22%20le%20tuple%20en%20une%20liste%20classique%20d%E2%80%99arguments%20d%E2%80%99appel%20pour%20la%20fonction.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20maSomm(a%2Cb%2Cc)%3A%20%23%20normalement%20cette%20fonction%20attend%20exactement%203%20arguments%0A%20%20%20%20return%20a%2Bb%2Bc%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20elements%20%3D%20(2%2C%204%2C%206)%0A%20%20%20%20print(maSomm(*elements))%20%23%20on%20d%C3%A9compose%20le%20tuple%20pour%20passer%20ses%203%20%C3%A9l%C3%A9ments%20en%20arguments%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20elements_trop%20%3D%20(2%2C%204%2C%206%2C%208)%0A%20%20%20%20print(maSomm(*elements_trop))%20%23%20il%20y%20a%20trop%20d'%C3%A9l%C3%A9ments%20dans%20le%20tuple%20qu'on%20d%C3%A9compose%20pour%20les%20passer%20en%20arguments...%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20En%20Python%2C%20le%20passage%20des%20arguments%20est%20fait%20par%20affectation%20%3A%20il%20s%E2%80%99agit%20d%E2%80%99un%20passage%20des%20arguments%20par%20adresse%2C%20o%C3%B9%20on%20tient%20compte%20du%20statut%20mutable%20ou%20imutable%20des%20variables.%20On%20peut%20r%C3%A9sumer%20le%20passage%20des%20arguments%20comme%20suit%20%3A%0A%20%20%20%20-%20les%20passages%20de%20variables%20immutables%20(types%20de%20base%2C%20tuples)%20se%20comportent%20comme%20des%20passages%20par%20valeur.%0A%20%20%20%20-%20les%20passages%20variables%20mutables%20(listes%2C%20dictionnaires)%20passent%20par%20adresse.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Dans%20l'exemple%20ci-dessous%2C%20le%20passage%20des%20%60int%60%20en%20argument%20s'est%20fait%20par%20valeur%3A%20%C3%A0%20l'int%C3%A9rieur%20de%20la%20fonction%2C%20les%20variables%20%60A%60%20et%20%60B%60%20ont%20%C3%A9chang%C3%A9%20leurs%20valeurs%2C%20mais%20pas%20%C3%A0%20l'ext%C3%A9rieur%20de%20la%20fonction.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20echange(A%2C%20B)%3A%0A%20%20%20%20%20%20%20%20print(%22%3D%3D%3D%3D%3D%3D%3D%3D%3D%22)%0A%20%20%20%20%20%20%20%20print(%22d%C3%A9but%20de%20la%20fonction%20echange()%22)%0A%20%20%20%20%20%20%20%20print(%22A%20%3D%20%22%2C%20A%2C%20%22%5CnB%20%3D%20%22%2C%20B)%0A%20%20%20%20%20%20%20%20A%2C%20B%20%3D%20B%2C%20A%0A%20%20%20%20%20%20%20%20print(%22fin%20de%20la%20fonction%20echange()%22)%0A%20%20%20%20%20%20%20%20print(%22A%20%3D%20%22%2C%20A%2C%20%22%5CnB%20%3D%20%22%2C%20B)%0A%20%20%20%20%20%20%20%20print(%22%3D%3D%3D%3D%3D%3D%3D%3D%3D%22)%0A%20%20%20%20%20%20%20%20%23%20on%20ne%20renvoie%20rien%2C%20ce%20qui%20nous%20int%C3%A9resse%20c'est%20l'effet%20de%20la%20fonction%20sur%20a%20et%20b%0A%0A%20%20%20%20A%20%3D%201%0A%20%20%20%20B%20%3D%202%0A%20%20%20%20print(%22Avant%20la%20fonction%22)%0A%20%20%20%20print(%22A%20%3D%20%22%2C%20A%2C%20%22%5CnB%20%3D%20%22%2C%20B)%0A%20%20%20%20echange(A%2C%20B)%0A%20%20%20%20print(%22apr%C3%A8s%20la%20fonction%22)%0A%20%20%20%20print(%22A%20%3D%20%22%2C%20A%2C%20%22%5CnB%20%3D%20%22%2C%20B)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Dans%20l'exemple%20ci-dessous%2C%20le%20passage%20de%20la%20liste%20(mutable%20!)%20en%20argument%20s'est%20fait%20par%20adresse%3A%20la%20modification%20qui%20a%20eu%20lieu%20%C3%A0%20l'int%C3%A9rieur%20de%20la%20fonction%20est%20toujours%20visible%20en%20dehors%20de%20la%20fonction.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20echange_bis(cont%2C%20i%2C%20j)%3A%0A%20%20%20%20%20%20%20%20print(%22%3D%3D%3D%3D%3D%3D%3D%3D%3D%22)%0A%20%20%20%20%20%20%20%20print(%22d%C3%A9but%20de%20la%20fonction%20echange()%22)%0A%20%20%20%20%20%20%20%20print(cont)%0A%20%20%20%20%20%20%20%20cont%5Bi%5D%2C%20cont%5Bj%5D%20%3D%20cont%5Bj%5D%2C%20cont%5Bi%5D%0A%20%20%20%20%20%20%20%20print(%22fin%20de%20la%20fonction%20echange()%22)%0A%20%20%20%20%20%20%20%20print(cont)%0A%20%20%20%20%20%20%20%20print(%22%3D%3D%3D%3D%3D%3D%3D%3D%3D%22)%0A%20%20%20%20%20%20%20%20%23%20on%20ne%20renvoie%20rien%2C%20ce%20qui%20nous%20int%C3%A9resse%20c'est%20l'effet%20de%20la%20fonction%20sur%20a%20et%20b%0A%0A%20%20%20%20cont%20%3D%20%5B1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%5D%20%23%23%20c'est%20bon%2C%20une%20liste%20est%20un%20type%20mutable%0A%20%20%20%20%23%20cont%20%3D%20(1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10)%20%23%23%20erreur%2C%20un%20tuple%20est%20non%20mutable%20!%0A%20%20%20%20i%20%3D%202%0A%20%20%20%20j%20%3D%204%0A%20%20%20%20print(%22Avant%20la%20fonction%22)%0A%20%20%20%20print(cont)%0A%20%20%20%20echange_bis(cont%2C%20i%2C%20j)%0A%20%20%20%20print(%22apr%C3%A8s%20la%20fonction%22)%0A%20%20%20%20print(cont)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.4.%20R%C3%A9cursivit%C3%A9%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Fonctions%20r%C3%A9cursives%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Une%20fonction%20_r%C3%A9cursive_%20est%20une%20fonction%20qui%20s'appelle%20elle%20m%C3%AAme.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20L'exemple%20typique%20d'une%20fonction%20r%C3%A9cursive%20est%20la%20factorielle.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20factorielle(n)%3A%0A%20%20%20%20%20%20%20%20if%20n%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%201%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20n%20*%20factorielle(n-1)%0A%0A%20%20%20%20factorielle(12)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Attention%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20-%20On%20notera%20qu'une%20fonction%20r%C3%A9cursive%20doit%20toujours%20contenir%20un%20test%20%22d'arr%C3%AAt%22%20qui%2C%20s'il%20est%20v%C3%A9rifi%C3%A9%2C%20n'appelle%20pas%20la%20fonction%20une%20fois%20de%20plus.%20Cela%20permet%20de%20ne%20pas%20tourner%20%C3%A0%20l'infini...%20Dans%20l'exemple%20ci-dessus%2C%20c'est%20le%20test%20%60if%20n%3D%3D0%60.%0A%20%20%20%20-%20La%20r%C3%A9cursivit%C3%A9%20est%20une%20impl%C3%A9mentation%20%C3%A9l%C3%A9gante%20mais%20parfois%20inefficace%2C%20notamment%20en%20utilisation%20de%20la%20m%C3%A9moire.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.5.%20Documentation%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20De%20fa%C3%A7on%20g%C3%A9n%C3%A9rale%2C%20peu%20importe%20le%20langage%20de%20programmation%20que%20vous%20utilisez%2C%20il%20est%20important%20de%20documenter%20votre%20code%20non%20seulement%20%C3%A0%20l'aide%20de%20commentaires%20mais%20aussi%20en%20documentant%20les%20fonctions%20qui%20composent%20votre%20code.%20Quand%20un%20code%20fait%20plusieurs%20milliers%2Fmillions%20de%20lignes%2C%20cela%20permet%20de%20savoir%20ce%20qu'elles%20font%2C%20ce%20qu'elles%20attendent%20comme%20arguments%2C%20etc...%20C'est%20important%20pour%20vous%2C%20mais%20aussi%20vos%20collaborateur%E2%8B%85trice%E2%8B%85s%20sur%20le%20m%C3%AAme%20code%20et%20les%20personnes%20qui%20l'utiliseront.%0A%0A%20%20%20%20On%20utilise%20pour%20document%20des%20fonctions%20des%20_docstrings_.%20Un%20docstring%20plac%C3%A9%20en%20premi%C3%A8re%20ligne%20du%20corps%20d%E2%80%99une%20fonction%20d%C3%A9finit%20sa%20documentation.%20Il%20doit%20d%C3%A9crire%20ce%20que%20fait%20la%20fonction%20et%20quels%20arguments%20elle%20prend%2C%20mais%20pas%20comment%20elle%20effectue%20son%20travail.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20my_somme(a%2Cb)%20%3A%0A%20%20%20%20%20%20%20%20%22%22%22Retourne%20la%20somme%20de%20a%20et%20b%22%22%22%0A%20%20%20%20%20%20%20%20return%20a%2Bb%0A%0A%20%20%20%20help(my_somme)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Toutes%20les%20fonctions%20impl%C3%A9ment%C3%A9es%20de%20base%20ont%20une%20documentation.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20help(len)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20help(min)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.6.%20Fonctions%20anonymes%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Fonctions%20anonymes%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Les%20fonctions%20anonymes%20sont%20des%20fonctions%20qui%20ne%20sont%20pas%20d%C3%A9finies%20avec%20un%20nom.%20On%20utilise%20le%20mot-cl%C3%A9%20%60lambda%60%20pour%20d%C3%A9finir%20une%20telle%20fonction.%20Elles%20sont%20souvent%20utilis%C3%A9es%20dans%20des%20situations%20o%C3%B9%20une%20fonction%20simple%20est%20n%C3%A9cessaire%20pour%20une%20t%C3%A2che%20sp%C3%A9cifique.%20La%20structure%20g%C3%A9n%C3%A9rale%20est%0A%20%20%20%20%60%60%60%0A%20%20%20%20f%20%3D%20lambda%20x%20%3A%20action%20de%20la%20fonction%0A%20%20%20%20%60%60%60%0A%20%20%20%20La%20fonction%20s'appelle%20ensuite%20normalement%20avec%20%60f(x)%60.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Un%20premier%20exemple%20est%20la%20d%C3%A9finition%20de%20fonctions%20d'une%20variable%20r%C3%A9elle%20ou%20complexe%20au%20sens%20math%C3%A9matique%20du%20terme%2C%20par%20exemple%20%24f(x)%20%3D%20x%5E2%20%2B%201%24.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20f%20%3D%20lambda%20x%20%3A%20x**2%20%2B%201%0A%20%20%20%20print(f(3))%0A%20%20%20%20print(f(4))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20L'avantage%20de%20la%20d%C3%A9finition%20anonyme%20de%20fonctions%20appara%C3%AEt%20par%20exemple%20ci-dessous%2C%20mais%20vous%20rencontrez%20bien%20d'autres%20occasions%20d'y%20avoir%20recourt.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20f1(x)%20%3A%0A%20%20%20%20%20%20%20%20return%20x**2%2B1%0A%0A%20%20%20%20def%20f2(x)%20%3A%0A%20%20%20%20%20%20%20%20return%203*x-1%0A%0A%20%20%20%20def%20f3(x)%20%3A%0A%20%20%20%20%20%20%20%20return%20x**3%20%2B%202*x%20%2B%202%0A%0A%20%20%20%20def%20f4(x)%20%3A%0A%20%20%20%20%20%20%20%20return%205*x**2%20-%20x%20-%202%0A%0A%20%20%20%20listefonctions%20%3D%20%5Bf1%2C%20f2%2C%20f3%2C%20f4%5D%0A%20%20%20%20print(listefonctions%5B1%5D(2))%20%23%20f2(2)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20listefonctions_bis%20%3D%20%5Blambda%20x%20%3A%20x**2%20%2B%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lambda%20x%20%3A%203*x%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lambda%20x%20%3A%20x**3%20%2B%202*x%20%2B%202%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lambda%20x%20%3A%205*x**2%20-%20x%20-%202%5D%0A%20%20%20%20print(listefonctions_bis%5B1%5D(2))%20%23%20pareil%2C%20mais%20c'est%20plus%20compact...%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.%20Port%C3%A9e%20des%20variables%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Port%C3%A9e%20locale%20ou%20globale%20%3F%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20-%20Les%20objets%20_globaux_%20sont%20d%C3%A9finies%20%C3%A0%20l%E2%80%99ext%C3%A9rieur%20de%20toute%20fonction.%20Ils%20sont%20visibles%20%C3%A0%20l%E2%80%99int%C3%A9rieur%20de%20toute%20fonction%2C%20mais%20celle-ci%20ne%20peut%20pas%20les%20modifier.%0A%20%20%20%20-%20Les%20objets%20_locaux_%20sont%20d%C3%A9finis%20%C3%A0%20l%E2%80%99int%C3%A9rieur%20du%20corps%20d%E2%80%99une%20fonction.%20Ces%20objets%20ne%20sont%20accessibles%20que%20par%20la%20fonction%20elle-m%C3%AAme%20et%20ne%20sont%20plus%20accessible%20d%C3%A8s%20que%20l'appel%20de%20la%20fonction%20se%20termine.%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20Une%20fonction%20d%C3%A9finit%20sa%20propre%20port%C3%A9e%20(scope)%2C%20les%20variables%20cr%C3%A9%C3%A9es%20sont%20donc%20locales%20et%20peuvent%20porter%20le%20m%C3%AAme%20nom%20que%20des%20variables%20globales%20ou%20d%E2%80%99autres%20fonctions.%20Il%20est%20aussi%20possible%20de%20cr%C3%A9er%20des%20fonctions%20(rappelez-vous%20que%20ce%20sont%20des%20variables%20en%20Python%20!)%20dans%20une%20fonction.%20Elles%20seront%20aussi%20locales.%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Gestion%20des%20variables%20globales%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20-%20La%20fonction%20%60globals()%60%20renvoie%20un%20dictionnaire%20avec%20la%20liste%20des%20objets%20globaux%20comme%20couple%20%60nom%3Avaleur%60.%0A%20%20%20%20-%20Pour%20modifier%20une%20variable%20globale%20dans%20une%20fonction%2C%20on%20peut%20utiliser%20le%20mot-cl%C3%A9%20%60global%60.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20fonc_fail(Y)%3A%0A%20%20%20%20%20%20%20%20X%20%3D%20X%2B2%20%23%20x%20est%20une%20variable%20globale%2C%20on%20ne%20peut%20pas%20la%20modifier%20%C3%A0%20l'int%C3%A9rieur%20de%20la%20fonction...%0A%20%20%20%20%20%20%20%20Z%20%3D%20X%2BY%0A%20%20%20%20%20%20%20%20return%20Z%0A%0A%20%20%20%20X%20%3D%2099%0A%20%20%20%20fonc_fail(1)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20fonc(N)%3A%0A%20%20%20%20%20%20%20%20global%20M%20%23%20si%20M%20existe%20en%20dehors%20de%20fonc%2C%20sa%20valeur%20sera%20modifi%C3%A9e%20%C3%A0%20l'ext%C3%A9rieur%0A%20%20%20%20%20%20%20%20M%20%3D%20M%2B2%0A%20%20%20%20%20%20%20%20P%20%3D%20M%2BN%0A%20%20%20%20%20%20%20%20return%20P%0A%0A%20%20%20%20M%20%3D%2099%0A%20%20%20%20print(%22fonc(1)%20%3A%22%2C%20fonc(1))%20%23%20affiche%20%3A%20102%0A%20%20%20%20print(%22M%20global%20%3A%22%2C%20M)%20%23%20affiche%20%3A%20101%2C%20la%20valeur%20de%20M%20a%20chang%C3%A9%0A%0A%20%20%20%20def%20fonc_local(N)%3A%0A%20%20%20%20%20%20%20%20M%20%3D%203%20%23%20ici%2C%20on%20cr%C3%A9%C3%A9%20la%20variable%20locale%20M%2C%20qui%20ne%20vit%20qu'%C3%A0%20l'int%C3%A9rieur%20de%20la%20fonction%0A%20%20%20%20%20%20%20%20P%20%3D%20M%2BN%0A%20%20%20%20%20%20%20%20return%20P%0A%0A%20%20%20%20M%20%3D%2012%0A%20%20%20%20print(%22fonc_local(1)%20%3A%22%2C%20fonc_local(1))%20%23%20affiche%20%3A%204%0A%20%20%20%20print(%22M%20global%20%3A%22%2C%20M)%20%23%20affiche%20%3A%2012%2C%20la%20valeur%20de%20M%20n'a%20pas%20chang%C3%A9%20cette%20fois%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
9b850af980f0231c96049b79183b8a8c