Gestion - Créer votre Blog - Prochain Blog

Exploration du monde de la programmation web

Code source
Recherche
Galeries Photos
PHPin'up
Sondage  [Résultats]
Est-ce que vous aimez mon blog ?



Liste de diffusions
Statistiques
Visiteurs 47168
Billets 10
Photos en galerie 18
Commentaires 0
Membres 0
Google PageRank 0
   
Share / Partager
TAGS:
Practical Extraction and Report Language Flash Media Server Extensible Markup Language Personal Home Page Communauté OpenBSD CGI Structured Query Language Cpython NCSA

Python (Un langage réflexif)


Dimanche 18 Juin 2006 à 10h16:28 GMT -4.00

Python utilise une forme de typage dynamique appelé en anglais duck typing

Python
Python est un langage de programmation interprété, multi-paradigme. Il autorise la programmation impérative structurée, orientée objet, et fonctionnelle. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions.

Dénomination
Créé en 1989 par Guido van Rossum, ce langage trouve l'origine de son nom dans la série télévisée humoristique des Monty Python. Le langage est souvent representé par un python même si l'auteur a lui-même expliqué qu'il ne faisait en aucun cas référence au reptile. L'animal étant plus célèbre que le groupe de joyeux comédiens Monty Python, il s'est imposé rapidement. C'est ainsi que le site officiel Python.org utilise également l'icône du serpent.

Intérêt de Python
Les langages de scripts comme Python s'intègrent à différents niveaux de la vie d'un logiciel : réalisation d'outils de développement, réalisation de prototypes, intégration de scripts dans les logiciels (voir Gimp, Inkscape, Blender), infrastructure logicielle (voir Zope), etc. Par rapport aux autres langages, Python apparaît comme un choix intéressant pour les entreprises, notamment pour les raisons suivantes :

  • Python est un langage relativement mature (il est plus ancien que Java) et hautement portable,
  • Python possède une syntaxe intéressante par sa simplicité et sa compacité,
  • étant réflexif, Python permet une haute maîtrise de son environnement propre,
  • Python s'intègre facilement dans des projets écrits en C ou dans d'autres langage (voir Jython),
  • Python offre aussi un environnement de développement et de test, incluant un interpréteur intéractif, un compilateur, des outils de profiling, de débogage, de tests,
  • En matière de test et de couverture structurelle ou fonctionnelle, Python propose unittest, coverage, doctest, test_coverage, nose, pyunit, guitest, funkload. Les tests, en plus d'assurer la fiabilité, deviennent aussi la documentation des classes ou des fonctions.
  • Il n'impose pas obligatoirement le paradigme Objet et assure l'élaboration de scripts impératifs ou procéduraux d'une grande lisibilité, de maintenance, de portabilité et d'interopérabilité[1]. Les scripts sont ainsi aussi bien valides sur DOS, Microsoft Windows et Linux.
  • Une extension spécifique à Microsoft Windows existe (WMI, pyHook -interception clavier windows-).
  • L'usage de Python est indispensable sous certaines distribution de Linux (les outils d'administration graphiques de Red Hat dépendent de Python).
  • En gestion de configuration, des plug-in permettent de piloter facilement les outils libres (CVS et Subversion se pilotent avec des macros Python) ou non (ClearCase...) pour automatiser les traitements spécifiques aux grands projets qui doivent gérer différents produits proches, chacun décliné en différentes versions.
  • En POO et COO, Python permet d'écrire des frameworks de toute sorte, en utilisant massivement les design pattern, la structuration des projets en modules et classes, ainsi que la souplesse de la programmation dynamique. Il sert aussi de programme de commande pour la génération de code des outils MDA.

De plus en plus de couches logicielles sont développées en Python :

  1. Les couches de présentation des applications (couche IHM avec wxPython , pyQt, Tk, tkinter 3000, pyGTK, pybwidget, Pmw, TIX)
  2. les couches controller des serveurs d'application Web (analyse HTML -htmllib, xmllib, urlParse, mimetools- Serveur d'application : Zope - déjà 100.000 sites internet en 2006- Django, Turbogears, CherryPy, Plone, GGI ). Plone est un gestionnaire de contenu reposant sur Zope fortement soutenu par l'industrie (Intranet et portail, site internet dont le contenu rédactionnel peut être mis en ligne par les utilisateurs, gestion documentaire, travail collaboratif ...)
  3. les couches Modele d'acces aux données (MySQL -MySQLdb- , Oracle -dcoracle-, MS SQL Server, PostgreSQL -psycopg-, FireBird -kinterbasdb- , SybODBC, GadFly, PySqlite, Zodb- BDD objet -)
  4. la couche de persistance XML ( 4Suite, PySimpleXML, XmlSerializer, Jaxml) ou spécifique à Python (Cpickle, Shelve)
  5. les couches d'acces au middleware COM/CORBA/.NET (win32, OmniORB, Ironpython) : programmation orientée composants (pont vers des bibliothèques Fortran, C et C++)
  6. les couches de communication standalone (port serie : pySerial, port parallèle : pyParallel) , réseau (Twisted, urllib2, HTMLparser, ftplib], socket, poplib, rfc822, mailbox, mhlib, imaplib, smtplib, telnet, etc.)
  7. les couches de frameWork bas niveau (ajout de capacité de script. exemple : Boost.Python )
  8. Les couches multimédia : traitement d'image (PIL)
  9. Les couches utilitaires de gestion de l'heure (datetime, time), de compression (gzip), de codage/decodage de données binaires (hashlib -md5, sha- , base64, binHex, binascii ), de structure de données (decimal, deque, array, dico, list, queue, heapq), de parallélisme (thread), d'expressions régulières (re), de différences (difflib), de types (ctype), de manipulation de chaînes (string, str, StringIO), de parseur (standard - shlex, ConfigParser, email, parser, cmd - ou Tierce- pyBison, ples, pyparsing, ply, PyGgy, Yapps, pyLR ), de calcul (math, numarrray - tableaux multidimensionnaires - , cmath, random), de log (logging)...
  10. Le deploiement se fait soit en utilisant des modules d'installation standardisés (distutils), soit en générant un executable qui ne nécessite plus l'existence de l'interpréteur sur les machines cibles (Windows : py2exe, Cx_freeze; Unix : freeze)
Python est aussi un langage frontière:

En effet, les couches critiques temps réel ou à hautes performances échappent au développement pur Python : il faut alors simplement faire un wrapper python , sorte de passerelle inter-langage, vers une couche écrite en C ou autre (grace à SWIG, pyrex, ou le très puissant Boost.Python). Les performances sont au rendez-vous et peuvent etre encore améliorée avec des modules du genre just-in-time (JIT) compiler (psyco). L'informatique embarquée s'empare aussi de python (par exemple les mobiles NOKIA pour sa Series 60 : toolkit graphique - le Bluetooth - réseau GPRS - service de messagerie SMS - les scripts de déploiement). En outre, Python propose un mécanisme de typage fort (grace à l'API 'trait' ou au design pattern 'decorators' interne au langage) pour les applications exigentes en terme de sureté (applications scientifiques, militaires, nucléaires notamment).

Python s'étend à tout outil où le script assure l'efficacité et la force :

  1. En Dessin et PAO et CAO, Python est utilisé par PaintShopPro, Autocad, CATIA V5, Inkscape, Scribus, Blender.
  2. En électronique, Labview permet le scriptage du matériel virtuel.
  3. Les scripts Python sont les pendants des MACRO VB pour OpenOffice.
  4. IDA PRO (logiciel référence de désassemblage pour la cryptanalyse, détection de malware,..) est scripté par IDAPpython.
  5. En matière de MDA (Model driven architecture), les transformations PIM to PSM sont développées en Python, plus souple et plus puissant grâce au mécanisme d'introspection plus riche que celui de Java.
  6. Python s'adpate aussi au paradigme de la programmation logique (pylog -Prolog-, logique du 1er ordre).

Références de sociétés utilisant Python
Python est utilisé dans de nombreux domaines dont

  • l'industrie militaire,
  • la monétique,
  • les Technologies de l'information et de la communication,
  • l'informatique scientifique (SciPy, matplotlib),
  • l'informatique théorique (les possibilités de méta-programmation révolutionnent la réalisation des design pattern),
  • les enseignements de sciences physiques (Vpython),
  • la bio-informatique (bioPython),
  • les bibliothèques graphiques (Soya 3D, pyOpenGL, pyGame)
  • et les jeux (Civilization IV utilise Boost.Python).

Ainsi, de nombreuses sociétés[2] utilisent Python, que ce soit pour des développements internes :

  • Google (une partie d'infrastructure), Industrial Light and Magic (rendus)
  • NASA (CAD), Thawte (architecture sécurisée)
  • Boeing, Sanofi, Philips (traitement de données avec Jaxml)
  • Neuralynx (Boost.Python pour la neuroscience)
  • Rational Discovery (logiciels pharmaceutiques, biotechnologique et industrie chimique)
  • Thales avionics (deploiement, administration, outil de pré/post-traitement : logiciel temps réel embarqué pour système GPS)
  • LHC (Gaudi, framework pour la physique des particules)
  • EDF (modelisations complexes, Zope et CMS Plone - utilisation de python comme glu entre FORTRAN et C -; Langage de commande de CODE_ASTER - analyse de structure et thermo mécanique -)
  • France télécom (Zope / Plone : site communautaire, tableau de bord de supervision)
  • Thalès TAS (Jython pour les tests d'IHM java; administration, déploiement, production MDA pour générer du code à partir d'UML )
  • Tiny ERP (Progiciel de gestion intégré libre)
  • ALCATEL POSTAL (automatisation des tests)
  • SAGEM (Datacip - Systeme d'identification par empreinte digitale)
  • Caisse des dépôts (développement des services numériques)
  • le synchrotron de Grenoble (wxPython)
  • Administration : usage de ZOPE : Intercom (Service d'information du gouvernement), SIT (Système d'information territorial), ARH -agence regionale de l'hospitalisation-, etc...
  • la DGA : Xmeta : system expert à base de réseaux bayesien pour l'indentification de communications suspectes (Python GTK) : suggestion d'action, logique probabiliste
  • Eurocopter : ajout d'interfaces graphiques et de capacités d'échange de données à un existant codé en Fortran et C++
  • SNECMA : utilisation de pyGelsa pour scripter le logiciel de simulation en aérodynamique ELSA (projet DTP CAIMEN : aérodynamique externe des avions de transport)
  • SNCF (zope/CPS : de nombreux sites intranet et internet (quai des bulles, prix du polar)
Ou pour des logiciels fournis au public :

  • Zope Inc.(Zope),
  • ALINE : Atelier de littérature sur le NET
  • pyKota : logiciel de quotas d'impression
  • Disney (ToonTown)
  • WatchGuard (pare-feu)
  • Orange (Data mining)
  • P2P : Bittorrent (codé avec wxPython), I2P-BT
Caractéristique du langage
Une syntaxe simple, quasi algorithmique, des types de données de haut niveau et des bibliothèques extensives rendent ce langage très attractif pour le développement rapide d'applications, comme langage d'extension d'applications, pour le développement de scripts, ou encore comme interface permettant de connecter des composants existants. Sa syntaxe facilite son apprentissage (prise en main en 1/2 journée) et en fait un candidat idéal aussi bien pour l'apprentissage de la programmation orientée objet que pour le développment d'application industrielles puissantes, peu coûteuses et fiables.

Ceux qui connaissent Java auront peu de difficultés à programmer en Python.

Les langages dynamiques comparables à Python sont Perl, Ruby et Rexx et dans une certaine mesure Java, bien qu'il ne soit pas complètement dynamique.

Syntaxe
Les blocs sont identifiés par des espaces ou des tabulations (bien que les espaces soient très fortement recommandés). Il n'y a pas d'accolades comme en C/C++, ou de Begin ... End comme en Pascal. Cela oblige le programmeur à écrire un code lisible, à l'opposé de ce qu'on peut obtenir avec Perl, Ruby, ou Rebol, ce qui en fait un bon langage pédagogique. Des éditeurs de texte (pyScripter, Scite, jEdit, pydev pour eclipse, ...) aident à l'indentation automatique.

Un langage réflexif
Grâce à un usage intensif des dictionnaires (sorte de table de hachage), Python permet d'explorer les divers objets du langage (introspection) et dans certains cas de les modifier (intercession).


Système de type sous Python
Python utilise une forme de typage dynamique appelé en anglais duck typing. C'est-à-dire que les opérations possibles sur une variable (i.e. son interface) sont déterminées en fonction de la valeur associée à la variable. En Python, le type d'une variable n'est pas explicitement déclaré et peut varier au cours du temps. Pour connaître l'interface d'une variable, il est possible soit de faire un test sur le type associé à la variable (par type() ou isinstance()) soit de réaliser un duck test (s'il marche comme un canard et crie comme un canard, alors c'est un canard). Le duck test consiste à tester l'existence ou non d'opérations dans l'interface de la variable, au moyen notamment de hasattr().

Le duck typing facilite la création de fonctions ou de méthodes pouvant être appliqués à des objets partageant une même interface, même s'il n'ont aucun lien d'héritage. Par exemple, il est possible de créer une fonction permettant de compter le nombre d'éléments disponibles dans une classe, une instance, un module ou une fonction, en utilisant le même ensemble d'instructions. Cependant, le duck typing ne permet pas de reconnaître le comportement associé à un objet.

Une parodie du duck test a été présenté par les Monty Python dans Sacré Graal, au moment où une femme se fait accusée de sorcellerie.

Implémentations
Le langage Python est placé sous une licence libre (copyleft). L'interpréteur Python est aujourd'hui disponible sur la majorité des plates-formes existantes (Amiga, *BSD, GNU-Linux, AIX, Solaris, Mac OS, Windows). L'interpréteur Python est lui-même écrit en C. Il existe une version écrite en Java appelée Jython, et même une version écrite en Python (en développement) : PyPy. L'utilisation des frameworks Java est aussi possible avec JPype (couplage de python avec la machine virtuelle Java via la technologie JNI).

À l'instar de Perl, une des grandes forces du langage réside dans l'existence d'une bibliothèque standard très complète et d'un nombre important de bibliothèques externes. La bibliothèque standard supporte notamment de nombreux protocoles en usage pour la création de sites internet.

Outre l'implémentation de référence, nommée cpython (car écrite en langage C), on peut relever d'autres systèmes implémentant le langage python :

  • Stackless, une version de cpython n'utilisant pas la pile d'appel du langage C
  • Jython, un interpréteur python pour machine virtuelle Java,
  • un compilateur (expérimental) pour Parrot, la machine virtuelle de Perl 6.
  • IronPython, un interpréteur / compilateur (expérimental) pour plateforme .Net / Mono
  • PyPy un interpréteur python écrit dans un sous-ensemble de Python compilable vers le C ou LLVM.
  • [1] Movable Python (payant): Python sur une clef USB pour lancer des scripts sans installer python
Attention, ces autres implémentations ne bénéficient forcément pas de la totalité de la bibliothèque de fonctions écrites en C pour l'implémentation de référence. Jython, d'un autre côté, a accès aux bibliothèques fournies avec l'environnement de développement Java.

Originellement Python a été développé comme un langage de script pour Amoeba, un système d'exploitation qui n'est plus maintenu.

Python peut être utilisé avec les bibliothèques graphiques tkinter, Qt, GTK et WxWidgets.

Python est livré avec 300 modules et dispose de 1300 bibliothèques tierces[3] parmis beaucoup d'autres ressources[4].

Grâce à SWIG, Boost, IronPython, Python for Delphi ou Jython, Python peut utiliser des frameworks écrit dans d'autres langages (C, C++, Fortran, Java, .Net, Delphi, ...).

Il est également utilisé pour programmer le serveur d'application Zope.

Versions
Les dernières versions utilisées sont la 2.3 et la 2.4. La future version sera la 2.5 (prévue pour fin 2006). Un développement parallèle est en discussion pour Python 3.0, qui devrait sortir entre les versions 2.6 et 2.7. Elle introduira des incompatibilités.

Source : http://fr.wikipedia.org/wiki/Python

...Retour
Modifié le Mercredi 19 Decembre 2007
Rédacteur: Patrick Potvin 0 Commentaire [Lire] [Écrire] [Partager]
Partager ce billet : Share / Partager
Lien [Forum] [HTML] :

Envoyer ce billet à un ami(e)
 
 
Aperçu du message envoyé

Bonjour,

Je crois que cet article devrait t'intéresser.

«AdresseDuBillet»

«Article»

«AdresseDuBillet»

Bonne journée
«VotreCourriel»

Créer votre Blog sur www.LeMultiBlog.com

TAGS: Python Guido van Rossum Cpython Jython IronPython
 Gestion du Blog Sudoku Conçu par : DynamiqueGestion