<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.netapsys.fr/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Netapsys Blog</title>
  <link>http://blog.netapsys.fr/index.php/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Tue, 06 Jan 2009 10:51:28 +0100</pubDate>
  <copyright>Netapsys 2008</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Introduction à Python</title>
    <link>http://blog.netapsys.fr/index.php/post/2008/09/30/Python</link>
    <guid isPermaLink="false">urn:md5:91dd1291629d4c49a7be5bef672b59bf</guid>
    <pubDate>Tue, 30 Sep 2008 09:34:00 +0200</pubDate>
    <dc:creator>Darko Stankovski</dc:creator>
        <category>Python</category>
        <category>open source</category><category>Python</category><category>tutoriel</category>    
    <description>&lt;p&gt;Le monde fabuleux des langages de programmation est aujourd'hui très riche. Pour beaucoup, il se divise en langages de scripts et en langages d'applications. Les premiers permettent une écriture simple, sont interprétés et seraient destinés à des petites tâches de maintenance. Les seconds, compilés, plus complexes, seraient plus adaptés à produire de lourdes applications.&lt;/p&gt;


&lt;p&gt;Python a été conçu comme un langage de script. Cependant, son implémentation multiparadigme lui permet d'être utilisé aussi bien pour les petites tâches de maintenance, que comme une réelle application lourde. Petit tour du propriétaire.&lt;/p&gt;    &lt;p&gt;La présentation exhaustive de l'historique de Python existe un peu partout sur la toile (Wikipedia, Python.org). Mais voyons ici une présentation succincte. Python est un langage créé en 1989 au CWI par Guido Van Rossum, qui avait besoin d'un langage de script et qui n'en trouvait aucun correspondant à ses besoins. Python est inspiré de ABC, Modula 3, et du langage C. Lorsque Guido Van Rossum quitte le CNRI en 2000, Python alors en version 1.6.1 adopte une licence compatible avec la GPL. Depuis la version 2.1, Python est sous licence Python Software Foundation Licence, qui est dans les grandes lignes comparable à l'Apache Software Foundation Licence. Aujourd'hui, le développement de Python se poursuit sous la dictature bienveillante de Guido Van Rossum qui est depuis 2005 chez Google.&lt;/p&gt;


&lt;p&gt;A la date de rédaction de cet article, la version stable de Python est, depuis 2006, la 2.5. Deux versions sont prévues incessamment sous peu&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Py3k (Python 3000 en fait Python 3.0) est programmé pour octobre 2008. py3k marque un tournant car il sera incompatible avec les versions précédentes du fait de la modification profonde de certains objets propres aux langages (chaînes, dictionnaires...). Py3K s'accompagne également d'une réorganisation de l'ensemble des bibliothèques standard.&lt;/li&gt;
&lt;li&gt;Python 2.6, dont nous sommes depuis le 20 août 2008 à la Beta 3 (et dernière), est surtout destiné à permettre la transition en douceur entre le code 2.x et 3.0.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enfin, notons que Python doit son nom aux Monthy Python, dont Guido Van Rossum était un grand fan de la série Flying Circus, et non au serpent du même nom, bien que ce dernier sorte mieux en logo.&lt;/p&gt;


&lt;h2&gt;Points d'intérêt du langage.&lt;/h2&gt;

&lt;p&gt;Python a été conçu comme un langage de script. Il est donc interprété et supporte un typage dynamique, bien qu'il soit fortement typé. Cependant, Python est avant tout un langage multiparadigme et permet aussi bien la programmation objet que fonctionnelle. Python bénéficie également d'une gestion dynamique de la mémoire à l'aide d'un mécanisme de comptage de références, il possède un système de gestion des exceptions, et est réflectif et introspectif. Python est également extensible grâce à la possibilité d'interfaçage avec des bibliothèques C. Enfin, si l'interpréteur officiel est écrit en C et le rend portable (aussi bien sous des systèmes Windows, MacOS, Linux/Unix que sous BeOS, Os2 voir des systèmes mainframe type os/400 ou z/OS), il existe diverses implémentations sous divers langages. Nous pourrons retenir Jython, implémentation en Java qui est capable par exemple d'interagir avec la bibliothèque fournie avec le SDK.&lt;/p&gt;


&lt;p&gt;Enfin, Python trouve sa place dans des applications complexes. Son champ d'applications va donc du script (des outils de gestion de la distribution Ubuntu sont en Python) à l'application critique (Python est utilisé au contrôle de vol de la NASA) en passant par la mobilité (Nokia a ouvert sa plate forme pour permettre le développement d'applications en Python pour la série des N60, des plate-formes mobiles telles qu'OpenMoko permettent le développement d'applications en Python) ou le Web (avec le serveur d'application Zope ou le framework DJango).&lt;/p&gt;


&lt;h2&gt;Comment &quot;faire du Python&quot;&amp;nbsp;?&lt;/h2&gt;

&lt;p&gt;Python est fourni avec un interpréteur qui se présente comme une console dans laquelle il est possible d'exécuter des instructions Python. Cet environnement est pratique pour tester du code et explorer les instructions utilisées. Il est cependant préférable d'utiliser l'utilitaire &lt;strong&gt;iPython&lt;/strong&gt; qui offre de nombreuses autres fonctionnalités.&lt;/p&gt;


&lt;p&gt;Pour une utilisation et une réutilisation, il est évident que le code Python se situe dans des fichiers. Comme tous scripts originaires d'Unix, ceux ci doivent commencer par un sha-bang, et d'une ligne spécifiant l'encodage comme dans l'exemple ci-dessous.&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# -*- coding: UTF-8 -*-&lt;/span&gt;&lt;/pre&gt;


&lt;h2&gt;Syntaxe Python&lt;/h2&gt;

&lt;h3&gt;Organisation des instructions&lt;/h3&gt;

&lt;p&gt;Python propose une manière originale pour écrire le code, dans le but de le rendre concis et lisible. Ainsi, du code Python s'écrit avec une instruction par ligne (bien qu'il soit possible d'en saisir plusieurs séparées par un point virgule) et les blocs sont délimités par l'indentation. Attention à ce sujet, en fonction des environnements, une série d'espaces (&quot;    &quot;) ne sera pas équivalent à une tabulation (&quot;/t&quot;). Des outils comme le plug-in PyDev pour Eclipse gère les conversions.&lt;/p&gt;


&lt;h3&gt;Quelques types simples&lt;/h3&gt;

&lt;p&gt;Les types simples en Python sont assez communs avec les autres langages&amp;nbsp;: entiers, décimaux, chaînes... Si le type sera déterminé dynamiquement, il faut savoir que Python gère deux types d'entiers&amp;nbsp;: le type &lt;strong&gt;int&lt;/strong&gt; et le type &lt;strong&gt;long&lt;/strong&gt;. Le type &lt;strong&gt;int&lt;/strong&gt; dépend de l'architecture donnée et sera le plus communément représenté sur 32 bits, taille d'un registre, ce qui permet une optimisation des calculs à base d'&lt;strong&gt;int&lt;/strong&gt;. Le type &lt;strong&gt;long&lt;/strong&gt; sera stocké en mémoire et ne sera ainsi limité que par la mémoire physique de l'ordinateur et donc virtuellement infini. Mais moins optimisé.&lt;/p&gt;


&lt;p&gt;Les chaînes de caractères sont comparables à ce qui se trouve dans les autres langages. Il faut juste savoir qu'il s'agit d'un type immuable (non modifiable) mais accessible comme une liste (voir ci dessous).&lt;/p&gt;


&lt;p&gt;Notons aussi que Python gère nativement des types tel que les complexes (z = x +iy).&lt;/p&gt;


&lt;h3&gt;Quelques types complexes...&lt;/h3&gt;

&lt;p&gt;...à ne pas confondre avec le type représentant les nombres complexes qui concluait la partie précédente.&lt;/p&gt;


&lt;p&gt;Dans les types complexes, on va retenir les listes, les tuples et les dictionnaires.&lt;/p&gt;


&lt;p&gt;Les listes sont une collection d'éléments. Il est possible d'accéder à ces éléments, d'en ajouter et d'en supprimer. Un élément peut être n'importe quel type supporté par Python. De plus, en Python, une liste est de type &lt;strong&gt;liste&lt;/strong&gt;, c'est à dire qu'elle peut contenir des éléments de types différents.&lt;/p&gt;


&lt;p&gt;Les accès à une liste peuvent se faire selon un indice ou une plage. L'exemple ci dessous crée une liste, affiche l'élément en indice 1, ajoute un élément en fin de liste, liste les éléments entre les indices 1 et 3, les éléments de l'indice 1 à la fin, utilise un indice négatif pour accéder à la liste à l'envers et le remplacement de plusieurs éléments.&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;maListe = &lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'java'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'python'&lt;/span&gt;, &lt;span style=&quot;color: #ff4500;&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;maListe&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: #483d8b;&quot;&gt;'python'&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;maListe.&lt;span style=&quot;color: black;&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'asp'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'visual basic'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;maListe&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;:&lt;span style=&quot;color: #ff4500;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'python'&lt;/span&gt;, &lt;span style=&quot;color: #ff4500;&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;maListe&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;:&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'python'&lt;/span&gt;, &lt;span style=&quot;color: #ff4500;&quot;&gt;42&lt;/span&gt;, &lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'asp'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'visual basic'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;maListe&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;-2&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: #ff4500;&quot;&gt;42&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;maListe &lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;:&lt;span style=&quot;color: #ff4500;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt; = &lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'perl'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;maListe
&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'java'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'perl'&lt;/span&gt;, &lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'asp'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'visual basic'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Les &lt;strong&gt;tuples&lt;/strong&gt; sont un type particulier assimilable à une liste non modifiable. Les opérations pouvant être effectuées sont ainsi les mêmes que pour les listes excepté les opérations de modification.&lt;/p&gt;


&lt;p&gt;Les dictionnaires sont des collections de couples clef:valeur. La &lt;strong&gt;clef&lt;/strong&gt; doit être un élément de type non modifiable, ce qui peut être une valeur numérique, une chaîne de caractères, voir même un tuple si celui-ci n'est composé que d'éléments non modifiables (pas de liste par exemple).&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;monDico=&lt;span style=&quot;color: black;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'sun'&lt;/span&gt;:&lt;span style=&quot;color: #483d8b;&quot;&gt;'java'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'microsoft'&lt;/span&gt;:&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'asp'&lt;/span&gt;, &lt;span style=&quot;color: #483d8b;&quot;&gt;'visual basic'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;monDico&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'sun'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: #483d8b;&quot;&gt;'java'&lt;/span&gt;&lt;/pre&gt;


&lt;h3&gt;Les structures de contrôle&lt;/h3&gt;

&lt;p&gt;Les structures de contrôle peuvent paraître particulières à tout développeur C, Java, .Net. La structure conditionnelle est assez classique sous le format&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;i = &lt;span style=&quot;color: #ff4500;&quot;&gt;100&lt;/span&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;if&lt;/span&gt; i &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #ff4500;&quot;&gt;1000&lt;/span&gt;:
    &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'i est petit'&lt;/span&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;elif&lt;/span&gt; i == &lt;span style=&quot;color: #ff4500;&quot;&gt;1000&lt;/span&gt;:
    &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'i est tout juste bien'&lt;/span&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;else&lt;/span&gt;:
    &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'i est grand'&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Il y a à côté, 2 structures de boucles, les boucles &lt;strong&gt;while&lt;/strong&gt; et les boucles &lt;strong&gt;for&lt;/strong&gt;. La boucle &lt;strong&gt;while&lt;/strong&gt; est exécutée tant que la condition est vraie.&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;i = &lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;while&lt;/span&gt; i &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #ff4500;&quot;&gt;1000&lt;/span&gt;:
    &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;'i est toujours trop petit'&lt;/span&gt;
    i = i + &lt;span style=&quot;color: #ff4500;&quot;&gt;1&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;La boucle &lt;strong&gt;for&lt;/strong&gt; par contre permet d'itérer sur une collection. Elle peut être aidée pour cela avec la fonction &lt;strong&gt;range(n)&lt;/strong&gt; qui permet de générer une liste d'entier de 0 à n-1.&lt;/p&gt;


&lt;p&gt;L'exemple suivant affiche les entiers de 0 à 9&amp;nbsp;:&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff4500;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:
    &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; i&lt;/pre&gt;


&lt;p&gt;L'exemple suivant, pour lequel &lt;strong&gt;monDico&lt;/strong&gt; est défini, permet d'afficher les valeurs associées à toutes les clefs&amp;nbsp;:&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; monDico.&lt;span style=&quot;color: black;&quot;&gt;keys&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:
    &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; monDico&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Une particularité avec les boucles est l'instruction &lt;strong&gt;else&lt;/strong&gt; comme dans l'exemple ci-dessous&amp;nbsp;:&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;in&lt;/span&gt; monDico.&lt;span style=&quot;color: black;&quot;&gt;keys&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:
    &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; monDico&lt;span style=&quot;color: black;&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span style=&quot;color: black;&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;else&lt;/span&gt;:
    &lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: #483d8b;&quot;&gt;&amp;quot;C'est tout&amp;quot;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Dans un contexte de boucle, l'instruction contenue dans le &lt;strong&gt;else&lt;/strong&gt; sera exécutée après l'exécution de la boucle sauf si une instruction &lt;strong&gt;break&lt;/strong&gt; est exécutée lors des itérations.&lt;/p&gt;


&lt;h3&gt;Écriture de fonctions&lt;/h3&gt;

&lt;p&gt;Pour écrire une fonction en Python, il suffit de suivre le patron suivant&amp;nbsp;:&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;def&lt;/span&gt; maFonction&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;mesParametres&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;:
    &lt;span style=&quot;color: #483d8b;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&amp;quot;Mon docstring&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    mes instructions&lt;/pre&gt;


&lt;p&gt;Si la structure est classique, un intérêt du langage Python est cette chaîne de caractères &lt;strong&gt;Mon docstring&lt;/strong&gt;. Il s'agit là d'un docstring, comparable au commentaire javadoc en java. Il est possible d'accéder spécifiquement à cette information par l'instruction&amp;nbsp;:&lt;/p&gt;

&lt;pre class=&quot;python&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;maFonction.__doc__
Mon docstring&lt;/pre&gt;


&lt;p&gt;Evidemment, de nombreux outils sont capables d'exploiter les informations contenus dans les docstrings.&lt;/p&gt;


&lt;h2&gt;En conclusion&lt;/h2&gt;

&lt;p&gt;Ce billet n'a pas la prétention d'être un cours complet sur Python. Cette première introduction est destinée à présenter un langage original qui est une réponse à l'opposition entre les langages de scripting et les langages compilés. De part ses origines, Python a une sémantique éloignée des langages utilisés dans l'informatique de gestion (Java, .Net, et même C/C++) mais offre des possibilités tout aussi puissantes qui seront développées dans des billets ultérieurs.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.netapsys.fr/index.php/post/2008/09/30/Python#comment-form</comments>
      <wfw:comment>http://blog.netapsys.fr/index.php/post/2008/09/30/Python#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.netapsys.fr/index.php/feed/rss2/comments/40</wfw:commentRss>
      </item>
    
  <item>
    <title>Un JUG printanier</title>
    <link>http://blog.netapsys.fr/index.php/post/2008/06/11/Un-JUG-printanier</link>
    <guid isPermaLink="false">urn:md5:ab6044cea5da1b8a16b6367f7cea2930</guid>
    <pubDate>Wed, 11 Jun 2008 00:43:00 +0200</pubDate>
    <dc:creator>Darko Stankovski</dc:creator>
        <category>Java</category>
        <category>java</category><category>JUG</category><category>parisJUG</category><category>spring</category>    
    <description>&lt;p&gt;Pour le dernier JUG Parisien de printemps, le thème était le &lt;a href=&quot;http://springframework.org/&quot;&gt;framework Spring&lt;/a&gt;. La mouture 2.5 est en effet sortie il y a environ 2 mois, accompagnée de son lot de nouveautés.&lt;/p&gt;


&lt;p&gt;Retour sur cette soirée riche en enseignements.&lt;/p&gt;    &lt;p&gt;Une des évolutions, qui concernera le plus grand monde, est l'utilisation plus importante des annotations qui permet de décharger de manière très importante les fichiers de configuration. En effet, l'une des grandes critiques que l'on pouvait faire à propos de Spring, est le volume de fichier de configuration XML. Avec cette mouture 2.5, la configuration XML devrait elle aussi être réduite puisqu'elle ne devrait concerner que la partie initiale du projet. Au développeur par la suite de tirer profit des annotations que Spring met à disposition pour alléger le code technique. Ceci a été illustré par le développement d'une fonctionnalité de Blog par la méthode des TDD (Test Driven Developement, Développement Dirigé par les Tests) par Christian Blavier au micro et Jean-François Hélie au clavier. Cette démonstration a pu mettre en avant l'avantage de cette méthode qui tire pleinement avantage de ce qu'offre Spring 2.5, ainsi que des outils associés tel que &lt;a href=&quot;http://www.unitils.org/&quot;&gt;Unitils&lt;/a&gt; qui permet de tirer profit de DBUnit et EasyMock pour les tests (plus ou moins) unitaires.&lt;/p&gt;


&lt;p&gt;La présence de Julien Dubois et Michaël Isvy, de &lt;a href=&quot;http://www.springsource.com/fr&quot;&gt;SpringSource&lt;/a&gt;, a permis d'approfondir les nouveautés de Spring 2.5. Parmi celles-ci, &lt;a href=&quot;http://static.springframework.org/spring-security/site/index.html&quot;&gt;Spring Security&lt;/a&gt;, évolution d'Acegi Security, est l'une des plus marquante. Acegi Security, bien que très bon outil de sécurité, avait comme gros défaut d'être très complexe à manipuler. Spring Security 2.0 équilibre la donne en réduisant la complexité, notamment au niveau du fichier de configuration, tout en permettant une gestion fine de la sécurité. Il est ainsi possible de  laisser Spring Security gérer les cookies d'authentification, de bloquer 2 authentifications simultanées, et par les méthodes d'interception, de gérer les autorisations d'appel de toute méthode des objets gérés par Spring. Tout cela peut faire l'objet d'un prochain billet...&lt;/p&gt;


&lt;p&gt;Pour le &lt;a href=&quot;http://springframework.org/projects&quot;&gt;reste des nouveautés&lt;/a&gt;, il faut citer Spring Dynamic Modules For OSGi(tm) Service Platforms qui a pour objectif de proposer des modules Java (et non pas juste des archives). Je vous laisse découvrir ce sujet sur la présentation disponible sous peu sur le &lt;a href=&quot;http://www.parisjug.org/xwiki/bin/view/Main/&quot;&gt;site de Paris Jug&lt;/a&gt;. On citera donc aussi Spring Batch, Spring Web Flow, Spring WebServices... Tant de projets qui apportent de manière souple des facilités pour le développement de nos applications Java.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.netapsys.fr/index.php/post/2008/06/11/Un-JUG-printanier#comment-form</comments>
      <wfw:comment>http://blog.netapsys.fr/index.php/post/2008/06/11/Un-JUG-printanier#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.netapsys.fr/index.php/feed/rss2/comments/27</wfw:commentRss>
      </item>
    
</channel>
</rss>