<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Structures de données et fonctions on kodkod | Cours d'introduction</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/</link><description>Recent content in Structures de données et fonctions on kodkod | Cours d'introduction</description><generator>Hugo</generator><language>fr</language><copyright>מבואות קודקוד</copyright><atom:link href="https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/index.xml" rel="self" type="application/rss+xml"/><item><title>list : créer, accéder, ajouter, supprimer, rechercher et parcourir</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/01-list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/01-list/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;list&lt;/strong&gt; est la structure de données la plus utilisée en Python. Nous l&amp;rsquo;avons déjà utilisée brièvement. Aujourd&amp;rsquo;hui, nous allons l&amp;rsquo;apprendre correctement :&lt;/p&gt;</description></item><item><title>tuple et set : un enregistrement fixe et une collection sans doublons</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/02-tuple-and-set/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/02-tuple-and-set/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;p&gt;Deux autres structures de données, chacune avec son propre « superpouvoir » :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;tuple&lt;/strong&gt; — comme une liste, mais &lt;strong&gt;fixe&lt;/strong&gt; : on ne peut pas le modifier après sa création.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;set&lt;/strong&gt; — une collection &lt;strong&gt;sans doublons&lt;/strong&gt; et sans ordre, qui permet de vérifier très rapidement si une valeur s&amp;rsquo;y trouve.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pourquoi-en-avons-nous-besoin-"&gt;Pourquoi en avons-nous besoin ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Un &lt;strong&gt;tuple&lt;/strong&gt; convient aux données qui représentent &lt;strong&gt;un seul enregistrement à structure fixe&lt;/strong&gt; : un point &lt;code&gt;(x, y)&lt;/code&gt;, une date &lt;code&gt;(2026, 10, 6)&lt;/code&gt;, une ligne d&amp;rsquo;une base de données &lt;code&gt;(7, &amp;quot;Dana&amp;quot;, 24)&lt;/code&gt;. Dans les thèmes backend et bases de données, &lt;strong&gt;chaque ligne renvoyée par la base de données arrivera sous forme de tuple !&lt;/strong&gt; Le fait d&amp;rsquo;être fixe garantit qu&amp;rsquo;aucun code ne modifie un enregistrement « par erreur ».&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;set&lt;/strong&gt; convient aux cas où l&amp;rsquo;on veut l&amp;rsquo;&lt;strong&gt;unicité&lt;/strong&gt; : combien d&amp;rsquo;utilisateurs &lt;strong&gt;différents&lt;/strong&gt; ont visité le site aujourd&amp;rsquo;hui ? Quelles étiquettes a un article ? Qui est inscrit à deux cours à la fois ?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="explication-à-partir-des-bases"&gt;Explication à partir des bases&lt;/h2&gt;
&lt;h3 id="tuple"&gt;tuple&lt;/h3&gt;
&lt;p&gt;Un &lt;strong&gt;tuple&lt;/strong&gt; est une séquence &lt;strong&gt;ordonnée&lt;/strong&gt; de valeurs, &lt;strong&gt;qu&amp;rsquo;on ne peut pas modifier&lt;/strong&gt; (Immutable). Une fois créé, on ne peut ni ajouter, ni supprimer, ni remplacer d&amp;rsquo;éléments.&lt;/p&gt;</description></item><item><title>dict : clé et valeur</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/03-dict/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/03-dict/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;p&gt;Un &lt;strong&gt;dict&lt;/strong&gt; (Dictionary, dictionnaire) est une structure qui contient des &lt;strong&gt;paires clé-valeur&lt;/strong&gt;. Au lieu d&amp;rsquo;accéder par position (&lt;code&gt;[0]&lt;/code&gt;), on accède par &lt;strong&gt;nom&lt;/strong&gt; (&lt;code&gt;[&amp;quot;name&amp;quot;]&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Slicing, Mutable face à Immutable, et is face à ==</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/04-slicing-mutability-identity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/04-slicing-mutability-identity/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Le Slicing&lt;/strong&gt; — comment découper une partie d&amp;rsquo;une liste, d&amp;rsquo;un tuple ou d&amp;rsquo;une chaîne.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mutable&lt;/strong&gt; face à &lt;strong&gt;Immutable&lt;/strong&gt; — ce qui peut être modifié et ce qui ne peut pas, et pourquoi c&amp;rsquo;est important.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les références&lt;/strong&gt; — ce qui se passe quand on écrit &lt;code&gt;b = a&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;is&lt;/code&gt; face à &lt;code&gt;==&lt;/code&gt;&lt;/strong&gt; — « la même valeur » face à « exactement le même objet ».&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pourquoi-en-avons-nous-besoin-"&gt;Pourquoi en avons-nous besoin ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Le Slicing&lt;/strong&gt; est partout : les 10 premiers résultats, les 3 derniers caractères d&amp;rsquo;un numéro de carte (&lt;code&gt;****1234&lt;/code&gt;), « la page 2 » d&amp;rsquo;une liste.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mutable&lt;/strong&gt; est à l&amp;rsquo;origine de l&amp;rsquo;un des bugs les plus déroutants de Python : « J&amp;rsquo;ai modifié une liste, et soudain la seconde a changé aussi ! ». Comprendre ce sujet évite des heures de débogage. Et dans le thème POO, les objets des classes se comportent exactement ainsi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="explication-à-partir-des-bases"&gt;Explication à partir des bases&lt;/h2&gt;
&lt;h3 id="le-slicing"&gt;Le Slicing&lt;/h3&gt;
&lt;p&gt;Le &lt;strong&gt;Slicing&lt;/strong&gt; (découpage) crée une &lt;strong&gt;nouvelle séquence&lt;/strong&gt; à partir d&amp;rsquo;une partie d&amp;rsquo;une séquence existante :&lt;/p&gt;</description></item><item><title>Les fonctions en profondeur : valeurs par défaut, fonctions comme objets, *args, **kwargs et lambda</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/05-functions-args-kwargs-lambda/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/05-functions-args-kwargs-lambda/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;p&gt;Dans le thème code propre et débogage, nous avons appris les bases : &lt;code&gt;def&lt;/code&gt;, les paramètres, &lt;code&gt;return&lt;/code&gt;. Aujourd&amp;rsquo;hui, nous allons apprendre quelques capacités qui rendent les fonctions beaucoup plus souples :&lt;/p&gt;</description></item><item><title>La portée (Scope) : Local, Enclosing, Global et Built-in (LEGB)</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/06-scope-legb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/06-scope-legb/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La portée&lt;/strong&gt; (Scope) = &lt;strong&gt;la zone du code où un nom (une variable ou une fonction) est connu&lt;/strong&gt;. Nous allons apprendre :&lt;/p&gt;</description></item><item><title>Les fonctions pures et les effets de bord</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/07-pure-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/07-pure-functions/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ce qu&amp;rsquo;est une &lt;strong&gt;fonction pure&lt;/strong&gt; (Pure Function).&lt;/li&gt;
&lt;li&gt;Ce qu&amp;rsquo;est un &lt;strong&gt;effet de bord&lt;/strong&gt; (Side Effect) — et quels types existent.&lt;/li&gt;
&lt;li&gt;Le piège de &lt;strong&gt;la modification d&amp;rsquo;une liste reçue en paramètre&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Comment écrire une &lt;strong&gt;version pure&lt;/strong&gt; d&amp;rsquo;une fonction.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pourquoi-en-avons-nous-besoin-"&gt;Pourquoi en avons-nous besoin ?&lt;/h2&gt;
&lt;p&gt;Voici une fonction qui semble innocente :&lt;/p&gt;</description></item><item><title>Les fonctions d'ordre supérieur : des fonctions qui reçoivent et renvoient des fonctions</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/08-higher-order-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/08-higher-order-functions/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ce qu&amp;rsquo;est une &lt;strong&gt;fonction d&amp;rsquo;ordre supérieur&lt;/strong&gt; (Higher-Order Function).&lt;/li&gt;
&lt;li&gt;Comment &lt;strong&gt;passer une fonction en paramètre&lt;/strong&gt; — et pourquoi sans parenthèses.&lt;/li&gt;
&lt;li&gt;Les fonctions intégrées &lt;strong&gt;&lt;code&gt;map&lt;/code&gt;&lt;/strong&gt; et &lt;strong&gt;&lt;code&gt;filter&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Le paramètre &lt;strong&gt;&lt;code&gt;key&lt;/code&gt;&lt;/strong&gt; de &lt;code&gt;sorted&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt; et &lt;code&gt;min&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Une fonction qui renvoie une fonction&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pourquoi-en-avons-nous-besoin-"&gt;Pourquoi en avons-nous besoin ?&lt;/h2&gt;
&lt;p&gt;Deux fonctions presque identiques :&lt;/p&gt;</description></item><item><title>Les fonctions imbriquées, les closures et nonlocal</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/09-nested-functions-nonlocal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/09-nested-functions-nonlocal/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La fonction imbriquée&lt;/strong&gt; (Nested Function) — une fonction définie dans une fonction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enclosing&lt;/strong&gt; — le E de LEGB, de près.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La closure&lt;/strong&gt; — une fonction qui « se souvient » de variables.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;nonlocal&lt;/code&gt;&lt;/strong&gt; — comment modifier une variable de la fonction englobante.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pourquoi-en-avons-nous-besoin-"&gt;Pourquoi en avons-nous besoin ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Une fonction d&amp;rsquo;aide privée :&lt;/strong&gt; parfois une fonction a besoin d&amp;rsquo;une petite fonction d&amp;rsquo;aide qui n&amp;rsquo;appartient &lt;strong&gt;qu&amp;rsquo;à elle&lt;/strong&gt;. Il n&amp;rsquo;y a aucune raison qu&amp;rsquo;elle soit globale et se mélange au reste du code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Des fonctions qui se souviennent d&amp;rsquo;un état :&lt;/strong&gt; dans la leçon précédente, nous avons vu que &lt;code&gt;make_multiplier(2)&lt;/code&gt; renvoie une fonction qui « se souvient » du nombre 2. Aujourd&amp;rsquo;hui, nous comprendrons comment cela fonctionne — et comment construire un compteur, un accumulateur ou un cache &lt;strong&gt;sans&lt;/strong&gt; &lt;code&gt;global&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="explication-à-partir-des-bases"&gt;Explication à partir des bases&lt;/h2&gt;
&lt;h3 id="une-fonction-dans-une-fonction"&gt;Une fonction dans une fonction&lt;/h3&gt;
&lt;p&gt;On peut définir un &lt;code&gt;def&lt;/code&gt; à l&amp;rsquo;intérieur d&amp;rsquo;un &lt;code&gt;def&lt;/code&gt;. La fonction intérieure :&lt;/p&gt;</description></item><item><title>Les décorateurs : ajouter un comportement à une fonction sans y toucher</title><link>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/10-decorators/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/fr/docs/python-data-functions/10-decorators/</guid><description>&lt;h2 id="quallons-nous-apprendre-"&gt;Qu&amp;rsquo;allons-nous apprendre ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ce qu&amp;rsquo;est un &lt;strong&gt;décorateur&lt;/strong&gt; (Decorator) et pourquoi il est utile.&lt;/li&gt;
&lt;li&gt;Comment construire un décorateur : une fonction qui reçoit une fonction et renvoie un &lt;strong&gt;wrapper&lt;/strong&gt; (une enveloppe).&lt;/li&gt;
&lt;li&gt;La syntaxe &lt;strong&gt;&lt;code&gt;@&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Un wrapper adapté à &lt;strong&gt;n&amp;rsquo;importe quelle&lt;/strong&gt; fonction, avec &lt;code&gt;*args&lt;/code&gt; et &lt;code&gt;**kwargs&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pourquoi-en-avons-nous-besoin-"&gt;Pourquoi en avons-nous besoin ?&lt;/h2&gt;
&lt;p&gt;Nous voulons afficher un message à chaque appel d&amp;rsquo;une fonction — pour le débogage :&lt;/p&gt;</description></item></channel></rss>