{"id":1286,"date":"2012-09-19T14:55:44","date_gmt":"2012-09-19T12:55:44","guid":{"rendered":"http:\/\/linux.leunen.com\/?p=1286"},"modified":"2012-09-19T14:55:44","modified_gmt":"2012-09-19T12:55:44","slug":"python-les-iterateurs-et-generateurs","status":"publish","type":"post","link":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/","title":{"rendered":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs"},"content":{"rendered":"<p>Pour une petite application que j&rsquo;avais d\u00e9cid\u00e9 d&rsquo;\u00e9crire en Python, j&rsquo;avais besoin de parcourir des cha\u00eenes de caract\u00e8res en prenant les caract\u00e8res 3 par 3. En tant qu&rsquo;amateur de C++, ma premi\u00e8re id\u00e9e \u00e9tait forc\u00e9ment de cr\u00e9er une boucle <em>for<\/em> du genre de celle qu&rsquo;on \u00e9crit en C++:<\/p>\n<pre class=\"codesource\">\r\nstd::string my_string(<span class=\"quotedstring\">\"azertyuiop\"<\/span>);\r\n<span class=\"reservedname\">for<\/span>(<span class=\"reservedname\">unsigned<\/span> <span class=\"reservedname\">int<\/span> i  = 0; i &lt; my_string.length(); i+=3)\r\n{\r\n  std::cout &lt;&lt; my_string.substr(i, 3) &lt;&lt; std::endl;\r\n}\r\n<\/pre>\n<p>Cette fa\u00e7on d&rsquo;\u00e9crire une boucle n&rsquo;est pas tr\u00e8s compliqu\u00e9e \u00e0 transcrire en Python. On peut utiliser la fonction <em>range()<\/em> \u00e0 laquelle on peut passer des param\u00e8tres dont le d\u00e9but, la fin et le &lsquo;pas&rsquo; (step) de la boucle. Cela donne quelque chose comme:<\/p>\n<pre class=\"codesource\">\r\nmy_string = <span class=\"quotedstring\">\"azertyuiop\"<\/span>\r\n<span class=\"reservedname\">for<\/span> i <span class=\"reservedname\">in<\/span> range(0, len(my_string), 3):\r\n  <span class=\"reservedname\">print<\/span> i, t[i:i + 3]\r\n<\/pre>\n<p>C&rsquo;est consid\u00e9r\u00e9 comme une m\u00e9thode pas tr\u00e8s pythonique. On pr\u00e9f\u00e9rera utiliser un <em>it\u00e9rateur<\/em> ou un <em>g\u00e9n\u00e9rateur<\/em>.<br \/>\nVoyons bri\u00e8vement et basiquement de quoi il s&rsquo;agit.<\/p>\n<h3>Les it\u00e9rateurs<\/h3>\n<p>Les <em>it\u00e9rateurs<\/em> sont des objets permettant de parcourir facilement des containers que ce soient des strings &#8211; qui ne sont que des containers de caract\u00e8res &#8211; des listes ou des containers d&rsquo;objets. Par exemple, pour r\u00e9cup\u00e9rer tous les caract\u00e8res constituant une cha\u00eene de caract\u00e8res, on proc\u00e8de comme ceci:<\/p>\n<pre class=\"codesource\">\r\nfor c in my_string:\r\n  print c\r\n<\/pre>\n<p>C&rsquo;est tr\u00e8s simple \u00e0 utiliser.<\/p>\n<p>Il est tr\u00e8s facile aussi de cr\u00e9er soi-m\u00eame un <em>it\u00e9rateur<\/em> de fa\u00e7on \u00e0 ce qu&rsquo;il se plie \u00e0 ce que l&rsquo;on veut faire. Pour cela, il suffit de cr\u00e9er un objet qui contient deux m\u00e9thodes: __iter__() et next().<br \/>\n<em>__iter__()<\/em> est appel\u00e9 implicitement au d\u00e9but de la boucle et doit renvoyer un objet it\u00e9rateur.<br \/>\n<em>next()<\/em> doit lever une exception <em>StopIteration<\/em> quand on est \u00e0 la fin de la boucle et qu&rsquo;il n&rsquo;y a plus d&rsquo;\u00e9l\u00e9ments \u00e0 traiter. <\/p>\n<p>Dans le cas d&rsquo;un <em>it\u00e9rateur<\/em> qui renvoie les caract\u00e8res trois par trois, <em>l&rsquo;it\u00e9rateur<\/em> ressemblerait \u00e0 ceci:<\/p>\n<pre class=\"codesource\">\r\n<span class=\"reservedname\">class<\/span> triplet:\r\n  <span class=\"reservedname\">def<\/span> __init__(self, data):\r\n    self.data = data\r\n    self.count = 0\r\n    self.length = len(data)\r\n  \r\n  <span class=\"reservedname\">def<\/span> __iter__(self):\r\n    <span class=\"reservedname\">return<\/span> self\r\n    \r\n  <span class=\"reservedname\">def<\/span> next(self):\r\n    <span class=\"reservedname\">if<\/span> self.count &gt; len(self.length):\r\n      <span class=\"reservedname\">raise<\/span> StopIteration\r\n    <span class=\"reservedname\">else<\/span>:\r\n      result = self.data[self.count:self.count+3]\r\n      self.count += 3\r\n      <span class=\"reservedname\">return<\/span> result\r\n<\/pre>\n<p>Et on peut l&rsquo;utiliser dans une boucle de cette fa\u00e7on:<\/p>\n<pre class=\"codesource\">\r\ntest = triplet(<span class=\"quotedstring\">\"azertyuiop\"<\/span>)\r\n     <span class=\"reservedname\">for<\/span> item <span class=\"reservedname\">in<\/span> test:\r\n       <span class=\"reservedname\">print<\/span> item\r\n<\/pre>\n<h3>Les g\u00e9n\u00e9rateurs<\/h3>\n<p>Cette m\u00e9thode utilisant un objet <em>it\u00e9rateur<\/em> me pla\u00eet bien. C&rsquo;est clair, efficace et tr\u00e8s OOP.<br \/>\nIl existe une autre m\u00e9thode qui est tr\u00e8s simple et qui utilise les principes de l&rsquo;<em>it\u00e9rateur<\/em> m\u00eame si c&rsquo;est bien cach\u00e9. Il s&rsquo;agit des fonctions <em>g\u00e9n\u00e9rateurs<\/em>. Il s&rsquo;agit en fait d&rsquo;une fonction qui retourne un <em>it\u00e9rateur<\/em> qui, lui-m\u00eame, peut \u00eatre utilis\u00e9 pour contr\u00f4ler une boucle par exemple.<br \/>\nLe simple fait d&rsquo;utiliser le mot-clef <em>yield<\/em> fait de la fonction une fonction <em>g\u00e9n\u00e9rateur<\/em>. Lorsque ce mot clef est rencontr\u00e9, il retourne la valeur en argument et l&rsquo;execution est suspendue jusqu&rsquo;\u00e0 la prochaine it\u00e9ration. <\/p>\n<p>Dans notre cas, cela donne ceci:<\/p>\n<pre class=\"codesource\">\r\n<span class=\"reservedname\">def<\/span> triplet(str):\r\n  current=0\r\n  <span class=\"reservedname\">while<\/span> current &lt;= len(str):\r\n    yield str[current:current+3]\r\n    current += 3\r\n<\/pre>\n<p>Et on l&rsquo;utilise dans une boucle comme d&rsquo;habitude:<\/p>\n<pre class=\"codesource\">\r\n<span class=\"reservedname\">for<\/span> t <span class=\"reservedname\">in<\/span> triplet(<span class=\"quotedstring\">\"azertyuiop\"<\/span>):\r\n  <span class=\"reservedname\">print<\/span> t\r\n<\/pre>\n<p>Comme on l&rsquo;a vu bri\u00e8vement ici, les <em>it\u00e9rateurs<\/em> et les <em>g\u00e9n\u00e9rateurs<\/em> sont tr\u00e8s simple d&#8217;emploi et on les retrouve tr\u00e8s fr\u00e9quemment dans les codes \u00e9crits en Python. Je vous renvoie \u00e0 la documentation si vous voulez en savoir plus.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pour une petite application que j&rsquo;avais d\u00e9cid\u00e9 d&rsquo;\u00e9crire en Python, j&rsquo;avais besoin de parcourir des cha\u00eenes de caract\u00e8res en prenant les caract\u00e8res 3 par 3. En tant qu&rsquo;amateur de C++, ma premi\u00e8re id\u00e9e \u00e9tait forc\u00e9ment de cr\u00e9er une boucle for du genre de celle qu&rsquo;on \u00e9crit en C++: std::string my_string(\u00ab\u00a0azertyuiop\u00a0\u00bb); for(unsigned int i = 0; [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[15],"tags":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"Tr\u00e8s utilis\u00e9s en Python, les it\u00e9rateurs et g\u00e9n\u00e9rateurs sont aussi tr\u00e8s facile \u00e0 mettre en oeuvre.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Michel Leunen\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Autour de Linux | Ubuntu, linux, C++, audio, python, ...\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs | Autour de Linux\" \/>\n\t\t<meta property=\"og:description\" content=\"Tr\u00e8s utilis\u00e9s en Python, les it\u00e9rateurs et g\u00e9n\u00e9rateurs sont aussi tr\u00e8s facile \u00e0 mettre en oeuvre.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2012-09-19T12:55:44+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2012-09-19T12:55:44+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs | Autour de Linux\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Tr\u00e8s utilis\u00e9s en Python, les it\u00e9rateurs et g\u00e9n\u00e9rateurs sont aussi tr\u00e8s facile \u00e0 mettre en oeuvre.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/#article\",\"name\":\"Python: les it\\u00e9rateurs et g\\u00e9n\\u00e9rateurs | Autour de Linux\",\"headline\":\"Python: les it\\u00e9rateurs et g\\u00e9n\\u00e9rateurs\",\"author\":{\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/author\\\/michel-leunen\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/#organization\"},\"datePublished\":\"2012-09-19T14:55:44+02:00\",\"dateModified\":\"2012-09-19T14:55:44+02:00\",\"inLanguage\":\"fr-FR\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/#webpage\"},\"articleSection\":\"python\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.leunen.com\\\/linux\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/category\\\/python\\\/#listItem\",\"name\":\"python\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/category\\\/python\\\/#listItem\",\"position\":2,\"name\":\"python\",\"item\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/category\\\/python\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/#listItem\",\"name\":\"Python: les it\\u00e9rateurs et g\\u00e9n\\u00e9rateurs\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/#listItem\",\"position\":3,\"name\":\"Python: les it\\u00e9rateurs et g\\u00e9n\\u00e9rateurs\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/category\\\/python\\\/#listItem\",\"name\":\"python\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/#organization\",\"name\":\"Autour de Linux\",\"description\":\"Ubuntu, linux, C++, audio, python, ...\",\"url\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/author\\\/michel-leunen\\\/#author\",\"url\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/author\\\/michel-leunen\\\/\",\"name\":\"Michel Leunen\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41e08d5087493eaa9ce4ebd4e0a55ffb?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Michel Leunen\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/#webpage\",\"url\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/\",\"name\":\"Python: les it\\u00e9rateurs et g\\u00e9n\\u00e9rateurs | Autour de Linux\",\"description\":\"Tr\\u00e8s utilis\\u00e9s en Python, les it\\u00e9rateurs et g\\u00e9n\\u00e9rateurs sont aussi tr\\u00e8s facile \\u00e0 mettre en oeuvre.\",\"inLanguage\":\"fr-FR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/2012\\\/09\\\/python-les-iterateurs-et-generateurs\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/author\\\/michel-leunen\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/author\\\/michel-leunen\\\/#author\"},\"datePublished\":\"2012-09-19T14:55:44+02:00\",\"dateModified\":\"2012-09-19T14:55:44+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/#website\",\"url\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/\",\"name\":\"Autour de Linux\",\"description\":\"Ubuntu, linux, C++, audio, python, ...\",\"inLanguage\":\"fr-FR\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.leunen.com\\\/linux\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs | Autour de Linux","description":"Tr\u00e8s utilis\u00e9s en Python, les it\u00e9rateurs et g\u00e9n\u00e9rateurs sont aussi tr\u00e8s facile \u00e0 mettre en oeuvre.","canonical_url":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/#article","name":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs | Autour de Linux","headline":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs","author":{"@id":"https:\/\/www.leunen.com\/linux\/author\/michel-leunen\/#author"},"publisher":{"@id":"https:\/\/www.leunen.com\/linux\/#organization"},"datePublished":"2012-09-19T14:55:44+02:00","dateModified":"2012-09-19T14:55:44+02:00","inLanguage":"fr-FR","mainEntityOfPage":{"@id":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/#webpage"},"isPartOf":{"@id":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/#webpage"},"articleSection":"python"},{"@type":"BreadcrumbList","@id":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.leunen.com\/linux#listItem","position":1,"name":"Home","item":"https:\/\/www.leunen.com\/linux","nextItem":{"@type":"ListItem","@id":"https:\/\/www.leunen.com\/linux\/category\/python\/#listItem","name":"python"}},{"@type":"ListItem","@id":"https:\/\/www.leunen.com\/linux\/category\/python\/#listItem","position":2,"name":"python","item":"https:\/\/www.leunen.com\/linux\/category\/python\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/#listItem","name":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.leunen.com\/linux#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/#listItem","position":3,"name":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs","previousItem":{"@type":"ListItem","@id":"https:\/\/www.leunen.com\/linux\/category\/python\/#listItem","name":"python"}}]},{"@type":"Organization","@id":"https:\/\/www.leunen.com\/linux\/#organization","name":"Autour de Linux","description":"Ubuntu, linux, C++, audio, python, ...","url":"https:\/\/www.leunen.com\/linux\/"},{"@type":"Person","@id":"https:\/\/www.leunen.com\/linux\/author\/michel-leunen\/#author","url":"https:\/\/www.leunen.com\/linux\/author\/michel-leunen\/","name":"Michel Leunen","image":{"@type":"ImageObject","@id":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/41e08d5087493eaa9ce4ebd4e0a55ffb?s=96&d=mm&r=g","width":96,"height":96,"caption":"Michel Leunen"}},{"@type":"WebPage","@id":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/#webpage","url":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/","name":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs | Autour de Linux","description":"Tr\u00e8s utilis\u00e9s en Python, les it\u00e9rateurs et g\u00e9n\u00e9rateurs sont aussi tr\u00e8s facile \u00e0 mettre en oeuvre.","inLanguage":"fr-FR","isPartOf":{"@id":"https:\/\/www.leunen.com\/linux\/#website"},"breadcrumb":{"@id":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/#breadcrumblist"},"author":{"@id":"https:\/\/www.leunen.com\/linux\/author\/michel-leunen\/#author"},"creator":{"@id":"https:\/\/www.leunen.com\/linux\/author\/michel-leunen\/#author"},"datePublished":"2012-09-19T14:55:44+02:00","dateModified":"2012-09-19T14:55:44+02:00"},{"@type":"WebSite","@id":"https:\/\/www.leunen.com\/linux\/#website","url":"https:\/\/www.leunen.com\/linux\/","name":"Autour de Linux","description":"Ubuntu, linux, C++, audio, python, ...","inLanguage":"fr-FR","publisher":{"@id":"https:\/\/www.leunen.com\/linux\/#organization"}}]},"og:locale":"fr_FR","og:site_name":"Autour de Linux | Ubuntu, linux, C++, audio, python, ...","og:type":"article","og:title":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs | Autour de Linux","og:description":"Tr\u00e8s utilis\u00e9s en Python, les it\u00e9rateurs et g\u00e9n\u00e9rateurs sont aussi tr\u00e8s facile \u00e0 mettre en oeuvre.","og:url":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/","article:published_time":"2012-09-19T12:55:44+00:00","article:modified_time":"2012-09-19T12:55:44+00:00","twitter:card":"summary","twitter:title":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs | Autour de Linux","twitter:description":"Tr\u00e8s utilis\u00e9s en Python, les it\u00e9rateurs et g\u00e9n\u00e9rateurs sont aussi tr\u00e8s facile \u00e0 mettre en oeuvre."},"aioseo_meta_data":{"post_id":"1286","title":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs | #site_title","description":"Tr\u00e8s utilis\u00e9s en Python, les it\u00e9rateurs et g\u00e9n\u00e9rateurs sont aussi tr\u00e8s facile \u00e0 mettre en oeuvre.","keywords":[{"label":"iterator,it\u00e9rateur,generator,generateur,yield,python,__iter__,next(),range()","value":"iterator,it\u00e9rateur,generator,generateur,yield,python,__iter__,next(),range()"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[],"defaultGraph":"","defaultPostTypeGraph":""},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2020-12-21 07:19:16","updated":"2025-06-23 21:13:43","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.leunen.com\/linux\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.leunen.com\/linux\/category\/python\/\" title=\"python\">python<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tPython: les it\u00e9rateurs et g\u00e9n\u00e9rateurs\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.leunen.com\/linux"},{"label":"python","link":"https:\/\/www.leunen.com\/linux\/category\/python\/"},{"label":"Python: les it\u00e9rateurs et g\u00e9n\u00e9rateurs","link":"https:\/\/www.leunen.com\/linux\/2012\/09\/python-les-iterateurs-et-generateurs\/"}],"_links":{"self":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/1286"}],"collection":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/comments?post=1286"}],"version-history":[{"count":7,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/1286\/revisions"}],"predecessor-version":[{"id":1293,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/1286\/revisions\/1293"}],"wp:attachment":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/media?parent=1286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/categories?post=1286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/tags?post=1286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}