{"id":4675,"date":"2012-06-21T17:10:32","date_gmt":"2012-06-21T21:10:32","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=4675"},"modified":"2013-08-07T19:47:45","modified_gmt":"2013-08-07T23:47:45","slug":"11b-fr","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/11b-fr\/","title":{"rendered":"11B: Port\u00e9e"},"content":{"rendered":"<!-- Please retain this notice and add more notes if you create a new version.<br \/>\nMain French translator: Brice Canvel, brice.canvel@gmail.com<br \/>\nOriginal lesson author: David Pritchard, daveagp@gmail.com<br \/>\nLicense: http:\/\/creativecommons.org\/licenses\/by-nc-sa\/3.0\/<br \/>\nFor the full site, visit http:\/\/cscircles.ca-->\n<p><em>La le\u00e7on 11 est compos\u00e9e de trois parties A, B et C. Ces trois parties peuvent \u00eatre compl\u00e9t\u00e9es dans n'importe quel ordre.<\/em><\/p>\n<p>Dans cette le\u00e7on, nous allons expliquer un concept appel\u00e9 <em>port\u00e9e des variables (anglais \u00abvariable scope\u00bb)<\/em>. L'id\u00e9e principale est qu'il est possible d'avoir deux variables <em> diff\u00e9rentes <\/em> avec le m\u00eame <em>nom<\/em> chaque fois qu'elles ont des port\u00e9es diff\u00e9rentes. Cela rend beaucoup plus facile \u00e0 \u00e9crire et \u00e9diter des programmes, en particulier les grands programmes.<\/p>\n<h2>Un exemple de la port\u00e9e des variables<\/h2>\n<p>Pour cet exemple, une partie de notre programme sera la fonction suivante:<\/p>\n<pre>def carr\u00e9(x):\r\n   valeur = x * x\r\n   return valeur<\/pre>Ceci est une fonction qui calcule le carr\u00e9 du nombre <code>x<\/code>, par exemple <code>carr\u00e9(5)<\/code> retourne <code>25<\/code>. Supposons maintenant que nous appelons <code>carr\u00e9<\/code> d'une autre partie du programme qui utilise aussi une variable <code>valeur<\/code>\u00a0pour un autre but:<\/p>\n<pre># corps principal du programme commence ici\r\nvaleur = 17\r\ncinqcarr\u00e9 = carr\u00e9(5)\r\nprint(cinqcarr\u00e9, valeur)<\/pre>La question est: qu'est-ce qui sera imprim\u00e9 dans ce sc\u00e9nario? Il ya deux possibilit\u00e9s, si nous ne savons pas comment fonctionne Python:<\/p>\n<ol>\n<li>Une possibilit\u00e9 est que Python reconna\u00eet que les deux valeurs des variables\u00a0<code>valeur<\/code>\u00a0doivent \u00eatre \"s\u00e9par\u00e9es\" d\u2019une fa\u00e7on ou d\u2019une autre. Ainsi, l'appel \u00e0 <code>carr\u00e9<\/code> aura une valeur de retour de 25, mais la valeur de <code>valeur<\/code> dans le corps principal restera \u00e0 17, et nous voyons la sortie <code>25\u00a0<code>17<\/code>.<\/code><\/li>\n<li>L'autre possibilit\u00e9 est que lorsque <code>carr\u00e9<\/code>\u00a0est ex\u00e9cut\u00e9, il remplacera la valeur existante de <code>valeur<\/code> avec 25, et nous voyons la sortie <code>25\u00a0<\/code><code>25<\/code>.<\/li>\n<\/ol>\n<p>Voyons ce qui se passe r\u00e9ellement!<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform0\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox0'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Introduction \u00e0 la port\u00e9e des variables<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 214px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=8 readonly='readonly'  style = 'height : 214px;'  class='pyboxCode RO'>\ndef carr\u00e9(x):\n    valeur = x * x\n    return valeur\n\n# corps principal commence ici\nvaleur = 17\ncinqcarr\u00e9 = carr\u00e9(5)\nprint(cinqcarr\u00e9, valeur)<\/textarea><\/div>\n<div id='pbhistory0' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit0' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(0)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(0,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse0\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"0\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"bdaf5cda21a57f9992244a91274234cb\"\/>\n<div id='pbresults0' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit0\").value = \"Run program\";document.getElementById(\"inputInUse0\").value = \"N\";<\/script>\nNous voyons que le comportement de Python est compatible avec la possibilit\u00e9 #1. En fait, <em>chaque fois vous appelez une fonction, vous ne pouvez pas affecter les variables d\u00e9finies en dehors de la fonction.<\/em> Au lieu de cela, toutes les d\u00e9clarations qui attribuent des valeurs aux variables ne concernent qu'une variable locale qui est \"l'int\u00e9rieur\" de la fonction appel\u00e9e . La <strong>raison<\/strong>\u00a0est que Python, et la plupart des autres langues, travaillent comme \u00e7a et que cela rend beaucoup plus simple d'\u00e9crire des programmes long avec de nombreuses fonctions. En particulier, lorsque nous d\u00e9finissons une nouvelle fonction, nous sommes toujours autoris\u00e9s \u00e0 utiliser des noms de variables (y compris les variables communes comme <code> resultat,<\/code> <code>temp<\/code> et <code>i<\/code> ) \u00e0 l'int\u00e9rieur de la fonction, m\u00eame si elles sont utilis\u00e9es ailleurs pour des raisons diff\u00e9rentes.<\/p>\n<h2>Illustration<\/h2>\n<p>Pour rendre cela plus explicite, ci-dessous est un tableau montrant les valeurs pendant qu\u2019elles changent.<br \/>\n<style>  .awesomeTables th, .awesomeTables td {text-align: center;} .awesomeTables tr td:first-child {text-align: left;}<\/style><\/p>\n<table class=\"awesomeTables\" style=\"margin-bottom: 0px; padding-right: 15px;\">\n<colgroup>\n<col width=\"36%\" \/> <\/colgroup>\n<colgroup>\n<col width=\"12%\" \/>\n<col width=\"12%\" \/>\n<col width=\"12%\" \/>\n<col width=\"14%\" \/>\n<col width=\"14%\" \/> <\/colgroup>\n<tbody>\n<tr>\n<th>Apr\u00e8s cette d\u00e9claration:<\/th>\n<th colspan=\"3\">valeurs globales<\/th>\n<th colspan=\"2\">valeurs locales de\u00a0<code>carr\u00e9(5)<\/code><\/th>\n<\/tr>\n<tr>\n<th><\/th>\n<th><code>carr\u00e9<\/code><\/th>\n<th><code>valeur<\/code><\/th>\n<th><code>cinqcarr\u00e9<\/code><\/th>\n<th><code>x<\/code><\/th>\n<th><code>valeur<\/code><\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<div id=\"foo\" style=\"margin-top: 0px; overflow-y: scroll; max-height: 100px;\">\n<table class=\"awesomeTables\" style=\"font-family: monospace; font-size: 12px; margin-bottom: 5px;\">\n<colgroup>\n<col width=\"36%\" \/> <\/colgroup>\n<colgroup>\n<col width=\"12%\" \/>\n<col width=\"12%\" \/>\n<col width=\"12%\" \/>\n<col width=\"14%\" \/>\n<col width=\"14%\" \/> <\/colgroup>\n<tbody>\n<tr>\n<td>def carr\u00e9(x): \u00ab+2 lignes de plus\u00bb<\/td>\n<td><strong>\u00abfnc obj\u00bb<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>value = 17<\/td>\n<td>\u00abfnc obj\u00bb<\/td>\n<td><strong>17<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>\u00abcall carr(5)\u00bb<\/td>\n<td>\u00abfnc obj\u00bb<\/td>\n<td>17<\/td>\n<td><\/td>\n<td><strong>5<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: white;\">---<\/span>valeur = x * x<\/td>\n<td>\u00abfnc obj\u00bb<\/td>\n<td>17<\/td>\n<td><\/td>\n<td>5<\/td>\n<td><strong>25<\/strong><\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: white;\">---<\/span>return valeur<\/td>\n<td>\u00abfnc obj\u00bb<\/td>\n<td>17<\/td>\n<td>25<\/td>\n<td>5<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<td>print(cinqcarr\u00e9, valeur)<\/td>\n<td>\u00abfnc obj\u00bb<\/td>\n<td>17<\/td>\n<td>25<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Dans le tableau, nous illustrons trois nouveaux d\u00e9tails:<\/p>\n<ul>\n<li>La port\u00e9e locale dispara\u00eet apr\u00e8s l'appel de fonction soit termin\u00e9e.<\/li>\n<li>La fa\u00e7on dont nous appliquons une fonction \u00e0 ses arguments est d'utiliser des variables locales! Plus pr\u00e9cis\u00e9ment, lorsque nous avons appel\u00e9 <code>carr\u00e9(5)<\/code>, c'est la m\u00eame chose que la cr\u00e9ation d'un nouveau champ d'application local, en ajoutant une variable <code>x<\/code> avec la valeur <code> 5<\/code> dans le champs local, puis en ex\u00e9cutant le corps de la fonction dans le champs\u00a0local.<\/li>\n<li>(Le troisi\u00e8me fait n'est pas li\u00e9 \u00e0 la port\u00e9e, mais est bon \u00e0 savoir.) La d\u00e9finition de la fonction carr\u00e9 est effectivement mis en \u0153uvre par Python de la mani\u00e8re suivante: un objet fonction nouvelle <code>\u00abfnc obj\u00bb<\/code> est d\u00e9fini, puis une variable <code>carr\u00e9<\/code>\u00a0est d\u00e9finie comme \u00e9tant \u00e9gale \u00e0 cet objet. En r\u00e9sum\u00e9, les fonctions sont un type particulier de variable.<\/li>\n<\/ul>\n<p>Comme d\u2019habitude vous pouvez voir comment le programme se comporte avec l\u2019<a href=\"\/visualize\">outil de visualisation<\/a>.<\/p>\n<p><div class='pybox modeNeutral' id='pybox1'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Multiple Choice Exercise: <\/span><span class='title'>Int\u00e9rieur et ext\u00e9rieur<\/span><\/div><div> Quelle est la sortie du programme suivant?<\/p>\n<pre>x = \"ext\u00e9rieur\"\r\ndef xRemplace(valeur):\r\n   x = valeur\r\nxRemplace(\"int\u00e9rieur\")\r\nprint(x)<\/pre><\/div><label>Your choice: <\/label><select id=\"pyselect1\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">int\u00e9rieur<\/option><option value=\"r\">ext\u00e9rieur<\/option><option value=\"w\">Une erreur est provoqu\u00e9e.<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"11b.inout\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(1)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults1\"><\/div><div class=\"epilogue\">Correct! La d\u00e9claration <code>x = valeur<\/code> ne concerne que la version locale de la variable <code>x<\/code> \u00e0 l'int\u00e9rieur de la fonction. La version globale de <code>x<\/code> ne change pas. (Ainsi, la fonction <code>xRemplace<\/code> est inutile et n'a jamais d'effet.)<\/div><\/div><br \/>\nUn autre concept similaire \u00e0 la <em>port\u00e9e<\/em> est un <em>espace de noms (\u00abnamespace\u00bb).<\/em>\u00a0Un espace de noms est comme un champ d'application pour un paquet. Donc, m\u00eame si vous <code>importez<\/code>\u00a0un paquet (comme <code>math<\/code>) qui utilise le nom de la variable <code>x<\/code> quelque part, il ne se chevauchent pas avec la variable <code>x<\/code> utilis\u00e9e par votre programme, car ils se situent dans diff\u00e9rents espaces de noms.<\/p>\n<h2>R\u00e8gles de port\u00e9e : voyant\u00a0vers l'ext\u00e9rieur<\/h2>\n<p>Il y a des situations o\u00f9 nous voulons m\u00e9langer les variables de champs locaux et globales.\u00a0Un exemple courant est lorsque vous avez une variable commune initialis\u00e9e une fois au d\u00e9but du programme, et vous voulez aussi que tout vos fonctions soient capables de lire sa valeur.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform2\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox2'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Lecture d\u2019une valeur globale de l\u2019int\u00e9rieur d\u2019une fonction <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 110px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=4 readonly='readonly'  style = 'height : 110px;'  class='pyboxCode RO'>\ngarniturePizza='pepperoni'\ndef commanderPizzas(n):\n print(\"J\u2019aimerais\", str(n), garniturePizza, \"pizzas\")\ncommanderPizzas(3)<\/textarea><\/div>\n<div id='pbhistory2' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit2' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(2)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(2,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse2\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"2\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"ca5bd67716b2e777188b9d4681760c83\"\/>\n<div id='pbresults2' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit2\").value = \"Run program\";document.getElementById(\"inputInUse2\").value = \"N\";<\/script>\n<\/p>\n<p>Ici, la port\u00e9e locale ne contient pas une variable nomm\u00e9e <code>garniturePizza<\/code>, <em>mais ceci n\u2019a pas caus\u00e9 une erreur <\/em>. La r\u00e8gle Python pour les \u00e9valuations de variables stipule que si une variable qui doit \u00eatre \u00e9valu\u00e9e qui n'existe pas dans la port\u00e9e locale, alors il cherche dans la port\u00e9e globale. Dans notre cas, il a en effet trouv\u00e9 <code>garniturePizza<\/code> dans la port\u00e9e globale. (Dans un cas plus g\u00e9n\u00e9ral le corps d'une fonction appelant une autre fonction, vous aurez trois champs; Python v\u00e9rifie toujours la plus locale (\u00ablocalmost\u00bb) d'abord et va une \u00e9tape \u00e0 la fois vers la port\u00e9e globale jusqu'\u00e0 ce que la variable soit trouv\u00e9e.)<br \/>\n<table class='pywarn'><tr><td class='pywarnleft'><img src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/warning.png'\/><\/td><td class='pywarnright'><span> Deux des exemples ci-dessus, avec <code> commanderPizzas<\/code> et <code>xRemplace<\/code>, sont presque identiques syntaxiquement. Pourquoi Python cr\u00e9e une nouvelle variable locale <code>x<\/code> dans <code> xRemplace<\/code>, mais aucune nouvelle <code>garniturePizza<\/code> dans <code>commanderPizzas<\/code>? La r\u00e8gle de Python est la suivante: si vous lisez seulement depuis la variable, aucune nouvelle variable locale n'est cr\u00e9\u00e9e, mais si vous \u00e9crivez dans la variable en serait-ce qu'une seule fois, alors la variable est consid\u00e9r\u00e9e comme locale tout au long du corps de la fonction. (Ceci est la cause la plus commune de <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=x%20%3D%201%0Adef%20f%28%29%3A%0A%20print%28x%29%0A%20x%20%3D%202%0Af%28%29\" target=\"_blank\"><code>UnboundLocalError<\/code><\/a>: voir ces deux questions (en anglais) [<a href=\"http:\/\/docs.python.org\/py3k\/faq\/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value\" target=\"_blank\">1<\/a>, <a href=\"http:\/\/docs.python.org\/py3k\/faq\/programming.html#what-are-the-rules-for-local-and-global-variables-in-python\" target=\"_blank\">2<\/a>] dans la documentation officielle de Python.)  <\/span><\/td><\/table><\/p>\n<p>Les arguments de fonction sont <em> toujours<\/em> trait\u00e9s comme de nouvelles variables locales:<br \/>\n<form class=\"pbform\" action=\"#\" id=\"pbform3\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox3'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Le fragment de code suivant bris\u00e9 tente de r\u00e9initialiser la variable <code>g<\/code>\u00a0\u00e0\u00a0<code>0<\/code>, mais il \u00e9choue.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode3' id='usercode3'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\ndef resterZero(var):\n var = 0\ng = 15\nresterZero (g)\nprint(g)<\/textarea><\/div>\n<div id='pbhistory3' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit3' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(3)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(3,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse3\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"3\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"c6b91ceb360603a1465b2975f4c908a9\"\/>\n<div id='pbresults3' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit3\").value = \"Run program\";document.getElementById(\"inputInUse3\").value = \"N\";<\/script>\n<\/p>\n<h2>Changements\u00a0<code>global<\/code><\/h2>\n<p>Comme beaucoup d'autres choses, le flux normal\u00a0d\u00e9crit ci-dessus fonctionne pour 99% des situations. Mais le reste, soit 1% du temps, vous voudrez peut-\u00eatre vraiment de changer une variable globale dans une fonction. Python vous permet de faire cela en utilisant l'instruction\u00a0<code>global<\/code>. Voici une modification de\u00a0<code>xRemplace<\/code>, vu pr\u00e9cedemment.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform4\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox4'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>D\u00e9clarer une variable comme <code>global<\/code> dans une fonction vous permet de changer la valeur globale \u00e0 l'int\u00e9rieur de la fonction.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 188px;'><textarea wrap='off' name='usercode4' id='usercode4'  cols=10 rows=7 readonly='readonly'  style = 'height : 188px;'  class='pyboxCode RO'>\ndef xRemplace(valeur):\n    global x\n    x = valeur\n\nx = \"ext\u00e9rieur\"\nxRemplace(\"int\u00e9rieur\")\nprint(x)          # cette fois, la sortie est 'int\u00e9rieur'!<\/textarea><\/div>\n<div id='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit4' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(4)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(4,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse4\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"4\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"f645d3f2ad1abaf4eef7ac7680dee133\"\/>\n<div id='pbresults4' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit4\").value = \"Run program\";document.getElementById(\"inputInUse4\").value = \"N\";<\/script>\n<\/p>\n<p>Comme nous l'avons mentionn\u00e9 plus t\u00f4t, la <em>lecture<\/em>\u00a0d'une variable globale ne n\u00e9cessite pas l'aide de la d\u00e9claration \u00ab<code>global<\/code>\u00bb; seulement son\u00a0<em>\u00e9criture <\/em>la n\u00e9cessite.<br \/>\nVous avez maintenant termin\u00e9 cette le\u00e7on et vous \u00eates pr\u00eats \u00e0 passer \u00e0 la suivante.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La le\u00e7on 11 est compos\u00e9e de trois parties A, B et C. Ces trois parties peuvent \u00eatre compl\u00e9t\u00e9es dans n'importe quel ordre. Dans cette le\u00e7on, nous allons expliquer un concept appel\u00e9 port\u00e9e des variables (anglais \u00abvariable scope\u00bb). L'id\u00e9e principale est &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/11b-fr\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4675","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4675","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/comments?post=4675"}],"version-history":[{"count":32,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4675\/revisions"}],"predecessor-version":[{"id":7470,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4675\/revisions\/7470"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=4675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}