Python, le serpent qui marche

Présentation
  • Quelques chiffres...
  • Positionnement
Synthaxe.
  • Les bases.
  • Conseils et idiomes.
Le serpent Objet.
  • Principes.
  • Comparaison.
Les autres serpents.
  • Les intégrés.
  • Développement.
  • Librairies.
Ressources.
  • Sites.
  • Articles.
  • Livres.
Mon expérience.
    Conclusion.
    Exemples d'utilisation
    • Du Java avec Jython.
    • Du CORBA avec OmniORB.
    • BOA, un serpent qui a de la gueule
    • Comment faire : mode d'emploi
    • Besoin de perf : mordu de C++


    Présentation

    [HAUT DE PAGE]

    Quelques chiffres...

    Pourquoi Python ?

    Python a été créé en 1990 : à cette époque, les langages de scripts apparaissent en nombre, en raison de la nécéssité de réaliser des taches d'administration système répétitives. A sa naissance, il s'agissait donc d'un langage de script des plus classiques.

    Etat civil

    Informations sur le père

    Il dirige maintenant l'équipe de développement du PythonLabs à la Zope Corporation.

    Communauté et projets

    La communauté est croissante et très active.

    Evolution du nombre de projets sur SourceForge.net

    Positionnement

    Python est un langage de programmation :



    Synthaxe.

    [HAUT DE PAGE]

    Les bases.

    Conseils et idiomes.



     > dir(x) ... dir() ... dir(__builtins__)
     > len(x)
     > for key in x.keys(): ...
     > X = A or B or None
     > red, green, blue = range(3) ... X, Y = Y, X
     > sys.argv ... os.environ ... sys.stdin/stdout/stderror ...
     > print -> sys.stdout/stdin
     > os.system('cmd') ... output = os.popen('cmd').read
    



    Le serpent Objet.

    [HAUT DE PAGE]

    Principes.

    Comparaison.

    J'ai essayé de comparer les principales caractéristiques de la programmation orientée objet. Pour cela j'ai volontairement opposé Python (version 2.2) à un langage qui se veut un langage de programmation objet, le C++, et un autre langage de script, j'ai nommé PHP (version 4).

    Comparaison du coté OO avec C++ et PHP

    Caractéristiques C++ Python PHP
    héritage + + +
    polymorphisme + - +
    arguments par défaut + ++ +
    surcharge méthode + + 5
    surcharge opérateur + +/- -
    virtuel pur + NA 5
    interface + NA 5
    classe abstraite + NA 5
    constructeur + + +
    new + NA +
    destructeur + + 5
    delete + + -
    visibilité (public, protected, private) + - 5
    friend + - -
    this + + +
    RTTI + + +
    réflexion - + +
    Attributs const + - +/-
    Attributs statiques + + +
    Par reference / valeur + +/- +
    templates + NA NA
    Portée (scope, namespace...) + + 5
    Pointeur de méthode + + +
    Clonage +/- + +
    Gestion des exceptions (try...catch...) + + 5
    Surcharge des exceptions + + 5
    (Re)compilation + NA NA
    Sérialisation - + +
    __call __set __get NA + 5
    Interpretation dynamique - + +

    Légende :

    De plus, Python possède de base des bibliotèques pour :



    Les autres serpents.

    [HAUT DE PAGE]

    Les intégrés.

    La distribution standard est livrée avec de nombreux modules, et notamment :

    Développement.

    Pour répondre à ceux qui s'intérogent sur la possibilité d'utiliser Python comme langage de développement sur un projet industriel, il existe des solutions proposées pour, voire par, Python, afin de répondre aux différentes problématiques relatives à un projet informatique.

    Librairies.

    En plus des nombreuses bibliotèques fournies avec la distribution standard, les librairies et projets open-sources sont en quantité et en nombre considérables (et croissant !), comme nous avons pu le voir sur le premier graphique. Voici un bref survol pour vous mettre l'eau à la bouche.



    Ressources.

    [HAUT DE PAGE]

    Sites.

    Articles.

    Livres.



    Mon expérience.

    [HAUT DE PAGE]

    Un retour d'expérience sur les différentes étapes de mon dernier projet :



    Conclusion.

    [HAUT DE PAGE]

    Points négatifs

    Points positifs

    Simple, rapide, complet, portable,comme glue ou langage, et en douceur !



    Exemples d'utilisation

    [HAUT DE PAGE]

    Du Java avec Jython.

    Jython est une implementation de Python écrite 100% en Java, et parfaitement intégrée à la plateforme Java.

    1. Installation :

      > java -classpath . jython-21

    2. Créer le fichier Developper.java :

      //
      // Developper.java
      //
      package com.pacte;
      public class Developpeur {
          private String _name;
          private boolean _isLovePython;
          public Developpeur(String name) {
              _name = name;
              _isLovePython = false;
          }
          public String name() {
              return _name;
          }
          protected void setIsLovePython(boolean isLovePython) {
              _isLovePython = isLovePython;
          }
          public boolean isLovePython() {
              return _isLovePython;
          }
       }

    3. Compilation :

      > %SDK_HOME%\bin\javac -classpath . Developpeur.java

    4. Compléter le CLASSPATH avec le répertoire de cette classe
    5. Dans la console Jython (.bat) :

      >>> from com.pacte import Developpeur
      >>> bobo = Developpeur("Bobo")
      >>> bobo.name()

    6. Créer me fichier Pactais.py :

      ##
      ## Pactais.py
      ##
      from com.pacte import Developpeur
      class Pactais(Developpeur):
      	def __init__(self,name):
      		Developpeur.__init__(self,name)
      	def seePythonPresentation(self):
      		self.setIsLovePython(1)

    7. Compléter Jython.bat : "-Dpython.path=%PYTHONPATH%"
    8. Dans la console Jython (.bat) :

      >>> import Pactais
      >>> bobo = Pactais.Pactais("Bobo")
      >>> bobo.isLovePython()
      0
      >>> bobo.seePythonPresentation()
      >>> bobo.isLovePython()
      1
      >>> bobo.setIsLovePython(0)
      >>> bobo.isLovePython()
      0
      

    Du CORBA avec OmniORB.

    OmniORB est un ORB avec un mapping Python...

    1. Contenu du fichier Server.py :

      ##
      ## Server.py
      ##
      import CORBA
      import sys
      import _GlobalIDL__POA
      
      class EchoImpl(_GlobalIDL__POA.Echo):
          def __init__(self):
              self._message= 'hello'
          def message(self):
              return self._message
          def setMessage(self,message):
              print 'setMessage : ', message
              self._message = message
      
      def run():
          orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
          server = EchoImpl()
          server._this()
          file = open('server.ior','w')
          file.write(orb.object_to_string(server._this()))
          file.close()
          poa = orb.resolve_initial_references("RootPOA")
          poaManager = poa._get_the_POAManager()
          poaManager.activate()
          orb.run()
      
      if __name__ =='__main__':
          run()

    2. Contenu du fichier Echo.idl :

      interface Echo
      {
        string message();
      
        void setMessage(in string message);
      };

    3. Compilation :

      > omniidl -bpython Echo.idl

    4. Contenu du fichier Client.py :

      ##
      ## Client.py
      ##
      import CORBA
      import sys
      import _GlobalIDL__POA
      
      def run():
           orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
           file = open('server.ior')
           object = orb.string_to_object(file.read())
           server = object._narrow(_GlobalIDL__POA.Echo)
           print server.message()
           server.setMessage('new message')
           print server.message()
      
      if __name__ =='__main__':
          run()

    BOA, un serpent qui a de la gueule

    Comment faire : mode d'emploi

    Besoin de perf : mordu de C++

    Dernière mise à jour : 2004

    www.2ia.net © 2001-2004