[{"data":1,"prerenderedAt":915},["ShallowReactive",2],{"page-\u002Fpython\u002Ffonctions-et-modules":3,"pieces-python":872,"autour-\u002Fpython\u002Ffonctions-et-modules":897,"prerequis-\u002Fpython\u002Ffonctions-et-modules":902,"plan-python":904},{"id":4,"title":5,"body":6,"description":845,"extension":846,"ligne":50,"meta":847,"motsCles":848,"navigation":107,"niveau":849,"path":850,"prerequis":851,"ressources":853,"seo":862,"sources":863,"stem":870,"__hash__":871},"docs\u002Fpython\u002F03.fonctions-et-modules.md","Fonctions et modules",{"type":7,"value":8,"toc":834},"minimark",[9,14,27,31,45,130,143,147,153,216,236,240,247,351,358,362,368,416,433,446,450,459,499,505,509,524,547,557,588,591,628,632,639,716,764,770,782,786,830],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,24],"ul",{},[18,19,20],"li",{},"Définir une fonction, lui passer des valeurs et récupérer un résultat.",[18,22,23],{},"Comprendre la portée des variables.",[18,25,26],{},"Découper un programme en modules et importer ceux de Python.",[10,28,30],{"id":29},"définir-une-fonction","Définir une fonction",[32,33,34,35,39,40,44],"p",{},"Une ",[36,37,38],"strong",{},"fonction"," est un bloc de code nommé qu'on peut appeler autant de fois qu'on veut. On la crée avec ",[41,42,43],"code",{},"def",".",[46,47,52],"pre",{"className":48,"code":49,"language":50,"meta":51,"style":51},"language-python shiki shiki-themes github-light-default github-dark-default github-dark-default","def saluer(nom):\n    print(f\"Bonjour {nom}\")\n\nsaluer(\"Léa\")\nsaluer(\"Tom\")\n","python","",[41,53,54,70,102,109,120],{"__ignoreMap":51},[55,56,59,62,66],"span",{"class":57,"line":58},"line",1,[55,60,43],{"class":61},"sOnC1",[55,63,65],{"class":64},"syCW7"," saluer",[55,67,69],{"class":68},"scfrF","(nom):\n",[55,71,73,77,80,83,87,90,93,96,99],{"class":57,"line":72},2,[55,74,76],{"class":75},"s5iOY","    print",[55,78,79],{"class":68},"(",[55,81,82],{"class":61},"f",[55,84,86],{"class":85},"shWOn","\"Bonjour ",[55,88,89],{"class":61},"{",[55,91,92],{"class":68},"nom",[55,94,95],{"class":61},"}",[55,97,98],{"class":85},"\"",[55,100,101],{"class":68},")\n",[55,103,105],{"class":57,"line":104},3,[55,106,108],{"emptyLinePlaceholder":107},true,"\n",[55,110,112,115,118],{"class":57,"line":111},4,[55,113,114],{"class":68},"saluer(",[55,116,117],{"class":85},"\"Léa\"",[55,119,101],{"class":68},[55,121,123,125,128],{"class":57,"line":122},5,[55,124,114],{"class":68},[55,126,127],{"class":85},"\"Tom\"",[55,129,101],{"class":68},[32,131,132,133,135,136,139,140,44],{},"Ce code affiche deux salutations. Le code de la fonction ne s'exécute qu'à l'appel. ",[41,134,92],{}," est un ",[36,137,138],{},"paramètre"," : un nom local qui reçoit la valeur donnée à l'appel, appelée ",[36,141,142],{},"argument",[10,144,146],{"id":145},"renvoyer-un-résultat","Renvoyer un résultat",[32,148,149,152],{},[41,150,151],{},"return"," envoie une valeur à celui qui appelle la fonction, puis termine la fonction.",[46,154,156],{"className":48,"code":155,"language":50,"meta":51,"style":51},"def prix_total(prix, portions):\n    return prix * portions\n\ntotal = prix_total(3.5, 4)\nprint(total)\n",[41,157,158,168,182,186,208],{"__ignoreMap":51},[55,159,160,162,165],{"class":57,"line":58},[55,161,43],{"class":61},[55,163,164],{"class":64}," prix_total",[55,166,167],{"class":68},"(prix, portions):\n",[55,169,170,173,176,179],{"class":57,"line":72},[55,171,172],{"class":61},"    return",[55,174,175],{"class":68}," prix ",[55,177,178],{"class":61},"*",[55,180,181],{"class":68}," portions\n",[55,183,184],{"class":57,"line":104},[55,185,108],{"emptyLinePlaceholder":107},[55,187,188,191,194,197,200,203,206],{"class":57,"line":111},[55,189,190],{"class":68},"total ",[55,192,193],{"class":61},"=",[55,195,196],{"class":68}," prix_total(",[55,198,199],{"class":75},"3.5",[55,201,202],{"class":68},", ",[55,204,205],{"class":75},"4",[55,207,101],{"class":68},[55,209,210,213],{"class":57,"line":122},[55,211,212],{"class":75},"print",[55,214,215],{"class":68},"(total)\n",[32,217,218,219,222,223,225,226,229,230,232,233,235],{},"Résultat : ",[41,220,221],{},"14.0",". Sans ",[41,224,151],{},", une fonction renvoie ",[41,227,228],{},"None",". Distingue bien ",[41,231,212],{},", qui affiche à l'écran, de ",[41,234,151],{},", qui fournit une valeur utilisable ailleurs.",[10,237,239],{"id":238},"valeurs-par-défaut-et-arguments-nommés","Valeurs par défaut et arguments nommés",[32,241,242,243,246],{},"Un paramètre peut avoir une ",[36,244,245],{},"valeur par défaut",", utilisée si on ne passe rien.",[46,248,250],{"className":48,"code":249,"language":50,"meta":51,"style":51},"def servir(plat, portions=2):\n    return f\"{plat} pour {portions} personnes\"\n\nprint(servir(\"Gratin\"))\nprint(servir(\"Gratin\", 6))\nprint(servir(\"Gratin\", portions=4))\n",[41,251,252,270,299,303,316,331],{"__ignoreMap":51},[55,253,254,256,259,262,264,267],{"class":57,"line":58},[55,255,43],{"class":61},[55,257,258],{"class":64}," servir",[55,260,261],{"class":68},"(plat, portions",[55,263,193],{"class":61},[55,265,266],{"class":75},"2",[55,268,269],{"class":68},"):\n",[55,271,272,274,277,279,281,284,286,289,291,294,296],{"class":57,"line":72},[55,273,172],{"class":61},[55,275,276],{"class":61}," f",[55,278,98],{"class":85},[55,280,89],{"class":61},[55,282,283],{"class":68},"plat",[55,285,95],{"class":61},[55,287,288],{"class":85}," pour ",[55,290,89],{"class":61},[55,292,293],{"class":68},"portions",[55,295,95],{"class":61},[55,297,298],{"class":85}," personnes\"\n",[55,300,301],{"class":57,"line":104},[55,302,108],{"emptyLinePlaceholder":107},[55,304,305,307,310,313],{"class":57,"line":111},[55,306,212],{"class":75},[55,308,309],{"class":68},"(servir(",[55,311,312],{"class":85},"\"Gratin\"",[55,314,315],{"class":68},"))\n",[55,317,318,320,322,324,326,329],{"class":57,"line":122},[55,319,212],{"class":75},[55,321,309],{"class":68},[55,323,312],{"class":85},[55,325,202],{"class":68},[55,327,328],{"class":75},"6",[55,330,315],{"class":68},[55,332,334,336,338,340,342,345,347,349],{"class":57,"line":333},6,[55,335,212],{"class":75},[55,337,309],{"class":68},[55,339,312],{"class":85},[55,341,202],{"class":68},[55,343,293],{"class":344},"sIXEE",[55,346,193],{"class":61},[55,348,205],{"class":75},[55,350,315],{"class":68},[32,352,353,354,357],{},"Le premier appel utilise 2, le deuxième 6, le troisième 4. Le dernier est un ",[36,355,356],{},"argument nommé"," : on précise le nom du paramètre, ce qui rend l'appel plus clair.",[10,359,361],{"id":360},"la-portée-des-variables","La portée des variables",[32,363,364,365,44],{},"Une variable créée dans une fonction n'existe que dans cette fonction. C'est sa ",[36,366,367],{},"portée",[46,369,371],{"className":48,"code":370,"language":50,"meta":51,"style":51},"def calculer():\n    resultat = 10\n    return resultat\n\ncalculer()\nprint(resultat)\n",[41,372,373,383,393,400,404,409],{"__ignoreMap":51},[55,374,375,377,380],{"class":57,"line":58},[55,376,43],{"class":61},[55,378,379],{"class":64}," calculer",[55,381,382],{"class":68},"():\n",[55,384,385,388,390],{"class":57,"line":72},[55,386,387],{"class":68},"    resultat ",[55,389,193],{"class":61},[55,391,392],{"class":75}," 10\n",[55,394,395,397],{"class":57,"line":104},[55,396,172],{"class":61},[55,398,399],{"class":68}," resultat\n",[55,401,402],{"class":57,"line":111},[55,403,108],{"emptyLinePlaceholder":107},[55,405,406],{"class":57,"line":122},[55,407,408],{"class":68},"calculer()\n",[55,410,411,413],{"class":57,"line":333},[55,412,212],{"class":75},[55,414,415],{"class":68},"(resultat)\n",[32,417,418,419,422,423,426,427,430,431,44],{},"La dernière ligne provoque une ",[41,420,421],{},"NameError",", car ",[41,424,425],{},"resultat"," est locale à ",[41,428,429],{},"calculer",". Pour récupérer une valeur, utilise ",[41,432,151],{},[434,435,436],"tip",{},[32,437,438,439,202,442,445],{},"Écris des fonctions qui font une seule chose et dont le nom est un verbe : ",[41,440,441],{},"calculer_prix",[41,443,444],{},"lire_recette",". Elles sont plus faciles à tester et à réutiliser.",[10,447,449],{"id":448},"documenter-avec-une-docstring","Documenter avec une docstring",[32,451,34,452,455,456,458],{},[36,453,454],{},"docstring"," est un texte entre triples guillemets, placé juste sous la ligne ",[41,457,43],{},". Elle décrit la fonction.",[46,460,462],{"className":48,"code":461,"language":50,"meta":51,"style":51},"def prix_total(prix, portions):\n    \"\"\"Renvoie le prix d'une recette pour un nombre de portions.\"\"\"\n    return prix * portions\n\nhelp(prix_total)\n",[41,463,464,472,477,487,491],{"__ignoreMap":51},[55,465,466,468,470],{"class":57,"line":58},[55,467,43],{"class":61},[55,469,164],{"class":64},[55,471,167],{"class":68},[55,473,474],{"class":57,"line":72},[55,475,476],{"class":85},"    \"\"\"Renvoie le prix d'une recette pour un nombre de portions.\"\"\"\n",[55,478,479,481,483,485],{"class":57,"line":104},[55,480,172],{"class":61},[55,482,175],{"class":68},[55,484,178],{"class":61},[55,486,181],{"class":68},[55,488,489],{"class":57,"line":111},[55,490,108],{"emptyLinePlaceholder":107},[55,492,493,496],{"class":57,"line":122},[55,494,495],{"class":75},"help",[55,497,498],{"class":68},"(prix_total)\n",[32,500,501,504],{},[41,502,503],{},"help()"," affiche cette description dans le terminal. Les éditeurs la montrent aussi au survol.",[10,506,508],{"id":507},"les-modules","Les modules",[32,510,511,512,515,516,519,520,523],{},"Un ",[36,513,514],{},"module"," est un fichier ",[41,517,518],{},".py"," dont on peut réutiliser le contenu. Crée ",[41,521,522],{},"calculs.py"," :",[46,525,527],{"className":48,"code":526,"filename":522,"language":50,"meta":51,"style":51},"def prix_total(prix, portions):\n    return prix * portions\n",[41,528,529,537],{"__ignoreMap":51},[55,530,531,533,535],{"class":57,"line":58},[55,532,43],{"class":61},[55,534,164],{"class":64},[55,536,167],{"class":68},[55,538,539,541,543,545],{"class":57,"line":72},[55,540,172],{"class":61},[55,542,175],{"class":68},[55,544,178],{"class":61},[55,546,181],{"class":68},[32,548,549,550,553,554,523],{},"Dans ",[41,551,552],{},"main.py",", placé dans le même dossier, importe-le avec ",[41,555,556],{},"import",[46,558,560],{"className":48,"code":559,"filename":552,"language":50,"meta":51,"style":51},"import calculs\n\nprint(calculs.prix_total(3.5, 4))\n",[41,561,562,569,573],{"__ignoreMap":51},[55,563,564,566],{"class":57,"line":58},[55,565,556],{"class":61},[55,567,568],{"class":68}," calculs\n",[55,570,571],{"class":57,"line":72},[55,572,108],{"emptyLinePlaceholder":107},[55,574,575,577,580,582,584,586],{"class":57,"line":104},[55,576,212],{"class":75},[55,578,579],{"class":68},"(calculs.prix_total(",[55,581,199],{"class":75},[55,583,202],{"class":68},[55,585,205],{"class":75},[55,587,315],{"class":68},[32,589,590],{},"On accède au contenu avec le nom du module, un point, puis le nom de la fonction. Pour importer un nom précis :",[46,592,594],{"className":48,"code":593,"language":50,"meta":51,"style":51},"from calculs import prix_total\n\nprint(prix_total(3.5, 4))\n",[41,595,596,609,613],{"__ignoreMap":51},[55,597,598,601,604,606],{"class":57,"line":58},[55,599,600],{"class":61},"from",[55,602,603],{"class":68}," calculs ",[55,605,556],{"class":61},[55,607,608],{"class":68}," prix_total\n",[55,610,611],{"class":57,"line":72},[55,612,108],{"emptyLinePlaceholder":107},[55,614,615,617,620,622,624,626],{"class":57,"line":104},[55,616,212],{"class":75},[55,618,619],{"class":68},"(prix_total(",[55,621,199],{"class":75},[55,623,202],{"class":68},[55,625,205],{"class":75},[55,627,315],{"class":68},[10,629,631],{"id":630},"la-bibliothèque-standard","La bibliothèque standard",[32,633,634,635,638],{},"Python est livré avec de nombreux modules prêts à l'emploi, regroupés dans la ",[36,636,637],{},"bibliothèque standard",". Quelques exemples :",[640,641,642,655],"table",{},[643,644,645],"thead",{},[646,647,648,652],"tr",{},[649,650,651],"th",{},"Module",[649,653,654],{},"Usage",[656,657,658,676,686,696,706],"tbody",{},[646,659,660,666],{},[661,662,663],"td",{},[41,664,665],{},"math",[661,667,668,669,202,672,675],{},"Fonctions mathématiques (",[41,670,671],{},"math.sqrt",[41,673,674],{},"math.pi",").",[646,677,678,683],{},[661,679,680],{},[41,681,682],{},"random",[661,684,685],{},"Tirage au sort.",[646,687,688,693],{},[661,689,690],{},[41,691,692],{},"datetime",[661,694,695],{},"Dates et heures.",[646,697,698,703],{},[661,699,700],{},[41,701,702],{},"json",[661,704,705],{},"Lire et écrire du JSON.",[646,707,708,713],{},[661,709,710],{},[41,711,712],{},"pathlib",[661,714,715],{},"Manipuler des chemins de fichiers.",[46,717,719],{"className":48,"code":718,"language":50,"meta":51,"style":51},"import random\n\nplats = [\"Crêpes\", \"Gratin\", \"Soupe\"]\nprint(random.choice(plats))\n",[41,720,721,728,732,757],{"__ignoreMap":51},[55,722,723,725],{"class":57,"line":58},[55,724,556],{"class":61},[55,726,727],{"class":68}," random\n",[55,729,730],{"class":57,"line":72},[55,731,108],{"emptyLinePlaceholder":107},[55,733,734,737,739,742,745,747,749,751,754],{"class":57,"line":104},[55,735,736],{"class":68},"plats ",[55,738,193],{"class":61},[55,740,741],{"class":68}," [",[55,743,744],{"class":85},"\"Crêpes\"",[55,746,202],{"class":68},[55,748,312],{"class":85},[55,750,202],{"class":68},[55,752,753],{"class":85},"\"Soupe\"",[55,755,756],{"class":68},"]\n",[55,758,759,761],{"class":57,"line":111},[55,760,212],{"class":75},[55,762,763],{"class":68},"(random.choice(plats))\n",[32,765,766,769],{},[41,767,768],{},"random.choice"," renvoie un élément au hasard de la liste : une idée de menu pour ce soir.",[771,772,773],"note",{},[32,774,775,776,779,780,44],{},"Ne nomme pas ton propre fichier comme un module existant. Un fichier ",[41,777,778],{},"random.py"," dans ton dossier masquerait le vrai module ",[41,781,682],{},[10,783,785],{"id":784},"à-retenir","À retenir",[15,787,788,797,804,807,810,818],{},[18,789,790,793,794,44],{},[41,791,792],{},"def nom(parametres):"," définit une fonction, appelée avec ",[41,795,796],{},"nom(arguments)",[18,798,799,801,802,44],{},[41,800,151],{}," renvoie une valeur ; sans lui, la fonction renvoie ",[41,803,228],{},[18,805,806],{},"Un paramètre peut avoir une valeur par défaut et accepter un argument nommé.",[18,808,809],{},"Une variable créée dans une fonction reste locale à celle-ci.",[18,811,812,813,815,816,44],{},"Un module est un fichier ",[41,814,518],{}," que l'on charge avec ",[41,817,556],{},[18,819,820,821,202,823,202,825,202,827,829],{},"La bibliothèque standard fournit ",[41,822,665],{},[41,824,682],{},[41,826,702],{},[41,828,712],{}," et bien d'autres.",[831,832,833],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}",{"title":51,"searchDepth":72,"depth":104,"links":835},[836,837,838,839,840,841,842,843,844],{"id":12,"depth":72,"text":13},{"id":29,"depth":72,"text":30},{"id":145,"depth":72,"text":146},{"id":238,"depth":72,"text":239},{"id":360,"depth":72,"text":361},{"id":448,"depth":72,"text":449},{"id":507,"depth":72,"text":508},{"id":630,"depth":72,"text":631},{"id":784,"depth":72,"text":785},"Écrire ses propres fonctions avec def et return, puis ranger et réutiliser son code grâce aux modules et à import.","md",{},[43,151,138,142,245,367,454,514,556],"debutant","\u002Fpython\u002Ffonctions-et-modules",[852],"\u002Fpython\u002Fconditions-et-boucles",[854,858],{"nom":855,"url":856,"type":857},"Le tutoriel officiel Python, en français","https:\u002F\u002Fdocs.python.org\u002Ffr\u002F3\u002Ftutorial\u002Findex.html","doc",{"nom":859,"url":860,"type":861},"Grafikart, Apprendre Python","https:\u002F\u002Fgrafikart.fr\u002Ftutoriels\u002Fpython","cours",{"title":5,"description":845},[864,867],{"nom":865,"url":866},"Documentation de Python, définir des fonctions","https:\u002F\u002Fdocs.python.org\u002Ffr\u002F3\u002Ftutorial\u002Fcontrolflow.html",{"nom":868,"url":869},"Documentation de Python, les modules","https:\u002F\u002Fdocs.python.org\u002Ffr\u002F3\u002Ftutorial\u002Fmodules.html","python\u002F03.fonctions-et-modules","qMS4bYN83ngkdMmfH-7bm-WVOGZfSSvlYCuAtLOPUD0",[873,877,880,881,885,889,893],{"path":874,"title":875,"stem":876},"\u002Fpython\u002Fpremiers-pas","Premiers pas avec Python","python\u002F01.premiers-pas",{"path":852,"title":878,"stem":879},"Conditions et boucles","python\u002F02.conditions-et-boucles",{"path":850,"title":5,"stem":870},{"path":882,"title":883,"stem":884},"\u002Fpython\u002Fcollections","Listes, dictionnaires et tuples","python\u002F04.collections",{"path":886,"title":887,"stem":888},"\u002Fpython\u002Ffichiers-et-exceptions","Fichiers, exceptions et JSON","python\u002F05.fichiers-et-exceptions",{"path":890,"title":891,"stem":892},"\u002Fpython\u002Fclasses-et-environnements","Classes, annotations et environnements virtuels","python\u002F06.classes-et-environnements",{"path":894,"title":895,"stem":896},"\u002Fpython","Python","python\u002Findex",[898,900],{"title":878,"path":852,"stem":879,"description":899,"children":-1},"Faire des choix avec if, elif et else, répéter des actions avec for et while, et comprendre pourquoi l'indentation compte en Python.",{"title":883,"path":882,"stem":884,"description":901,"children":-1},"Regrouper des valeurs avec les listes, les dictionnaires et les tuples, puis les transformer avec les compréhensions.",[903],{"path":852,"title":878,"ligne":50},[905,906,907,908,910,911,913],{"path":874,"title":875,"niveau":849,"stem":876},{"path":852,"title":878,"niveau":849,"stem":879},{"path":850,"title":5,"niveau":849,"stem":870},{"path":882,"title":883,"niveau":909,"stem":884},"intermediaire",{"path":886,"title":887,"niveau":909,"stem":888},{"path":890,"title":891,"niveau":912,"stem":892},"avance",{"path":894,"title":895,"niveau":914,"stem":896},"memo",1794583459323]