Présentation
Exemples d'utilisation
|
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
- Nom : ainsi, car son père adorait les Monty Python's Flying Circus.
- Père : Guido van Rossum
- Mère : Fière de son bébé
- Année de naissance : 1990
- Lieu de naissance : CWI (Centrum voor Wiskunde en Informatica, soit l'Institut nationale de recherche en mathématiques et informatique des Pays Bas) à Amsterdam.
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 :
- interprété,
- interactif,
- portable,
- à typage dynamique,
- exécution dynamique,
- et peut être orienté-objet.
Les bases.
- « Hello world ! », enfin pour les nuls !
- Les blocs et l'indentation, lourd !
- Le nommage, classique.
- Les commentaires, sur une seule ligne.
- Les variables : pas de déclaration de type.
> list = [] > argument = 45 > list.append(argument) > argument = 'Némo' > list.append(argument) > argument = [35, 25, 30] > list.append(argument) > print list [45, 'Némo', [35, 25, 30]]
- Les fonctions
- Les exceptions
- La documentation du code...
- Les mots clefs :
for ... in if ... elif ... else try ... raise ... except ... finaly
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
> 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
Principes.
- Le PYTHON_PATH
- Les modules,
- Les classes,
- L'arborescence,
- Le constructeur,
- L'héritage,
- L'instanciation,
- Autres idiomes : __doc__ et __name__
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 :
- + : disponible
- - : non disponible
- +/- : y a de l'idée
- NA : non applicable
- 5 : prévu dans la version 5
De plus, Python possède de base des bibliotèques pour :
- les threads,
- les tests,
- l'interface graphique,
- le traitement XML.
Les intégrés.
La distribution standard est livrée avec de nombreux modules, et notamment :
- os (pour une interaction portable avec le systeme d'environnement),
- string (pour manipuler les chaînes de caractères),
- math
- time
- regex (pour utiliser les expressions régulières),
- PyUnit (pour les tests unitaires),
- thread
- Pickel (pour la sérialisation des objets),
- sound
- signal
- image
- ftp
- TkInter (pour la réalisation d'interfaces graphiques),
- ...
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.
- Installation : simple, rapide, complète et gratuite.
- Editeurs : IDLE [intégré], Emacs, UltraEdit
- Tests unitaires : PyUnit [intégré]
- Profiler et debugger [intégré]
- Couverture de code : Coverage.py
- Détection de bugs : PyChecker
- Conception : PyUt, Dia et dia2code, PyReverse
- Remaniement : Bicycle Repair Man
- Livraison : py_compile [intégré], Py2exe
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.
- Bibliothèques graphiques : PyQt, PyOpenGL, PyUI, WxPython, pil
- Génération de documents : Reportlab (XML vers PDF)
- Les mapping : C++, Java, Ada95...
- CORBA : OmniORB, COBRA (a C++ Object Request Brokers (ORBs) wrapper for the Python language).
- Réseau, protocole : FtpCube, Ipy
- SIG : pygps
- Base de données : Hornet (MySQL) - Koala (PostGreSQL) - PyDBDesigner (ERW database modeling. Cf. Power Designer or Erwin) - PyDO (object- relational mapping tool for Oracle, PostgreSQL, MySQL, and SAP).
- Intelligence Artificielle : Traitement du langage (Traduki - Pytalk), Algorithmes genetiques (Python Genetic Programming Project, ...), Systemes agents (Narval)
- Serveurs d'application : Webware, Zope
- Internet : framework (WebTK COCORICO, Quixote, Maki), PyHP (system to embed Python code in an HTML document)
Sites.
- Pyhton.org : Le site officiel.
- Et sa mise à jour.
- La page du « créateur »
- La productivité en Python
- Quand Python est Agile
- Un peu de français
- Orbtech
- Pythonware
- Et des formations
Articles.
- [Article] Why work on Python ?
- [Article] Style Guide For Python Code
- [Article] Python Projects
- [Article] Who else uses Python?
- [Article] Design by Contract for Python
- [Article] Python is an Agile Programming Language
Livres.
- [Book] Python - précis et concis Mark Lutz O'Reilly and Associates
- [Book] Programming Python Mark Lutz O'Reilly and Associates
- [Book] Learning Python Mark Lutz O'Reilly and Associates
- [Book] Thinking in Python Bruce Eckel Prentice Hall
- [Book] Cours de programmation Python Gérard Swinnen
Un retour d'expérience sur les différentes étapes de mon dernier projet :
- ClassMaker par un stagiaire
- Tests fonctionnels via CORBA
- Génération de paramétrage, d'abord structurée (ad hoc), puis orientée Objet.
- Outils de diagnostic sur site
- Réalisation du PCE
Points négatifs
- Peut-être les performances...
- Attention à la permissivité et l'indentation !
Points positifs
- Apprentissage aisé : pas de compilation, présence de l'interpreter, syntaxe claire et intuitive.
- Développements rapides : pas de compilation (edit-test-debug), ramasse-miettes, prototypage aisé, ressources nombreuses (doc, lib,...).
Simple, rapide, complet, portable,comme glue ou langage, et en douceur !
Du Java avec Jython.
Jython est une implementation de Python écrite 100% en Java, et parfaitement intégrée à la plateforme Java.
- Installation :
> java -classpath . jython-21
- 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; } }
- Compilation :
> %SDK_HOME%\bin\javac -classpath . Developpeur.java
- Compléter le CLASSPATH avec le répertoire de cette classe
- Dans la console Jython (.bat) :
>>> from com.pacte import Developpeur >>> bobo = Developpeur("Bobo") >>> bobo.name()
- 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)
- Compléter Jython.bat : "-Dpython.path=%PYTHONPATH%"
- 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...
- 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()
- Contenu du fichier Echo.idl :
interface Echo { string message(); void setMessage(in string message); };
- Compilation :
> omniidl -bpython Echo.idl
- 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
- wxPython is a Python extension module that encapsulates the wxWindows GUI classes. Currently it is available for the Win32 and GTK ports of wxWindows, but as soon as the other ports are brought up to the same level as Win32 and GTK, it should be fairly trivial to enable wxPython to be used with the new GUI.
- Boa Constructor is a cross platform Python IDE and wxPython GUI Builder. It offers visual frame creation and manipulation, an object inspector, many views on the source like object browsers, inheritance hierarchies, doc string generated html documentation, an advanced debugger and integrated help.
- PyGuiXml is a Python tool designed to help creating GUIs. It takes an XML description of the GUI and outputs a graphical component that looks like and behaves as specified in the XML description. The graphical component currently uses the wxPython toolkit.
- wxDesigner is a dialog editor and RAD tool for the wxWindows C++ library and its popular Python and Perl bindings. It includes a visual dialog editor, a bitmap editor, a syntax-highlighting source editor, and built-in mechanisms for automatic generation of file skeletons, GUI classes, event handlers, and getter functions. It provides an identical user interface and identical functionality for C++, Perl, and Python, and it can generate output in C++, Python, Perl, and XML.
- Python UIML renderer
- PythonCard is a GUI construction kit for building cross-platform desktop applications on Windows, Mac OS X, and Linux, using the Python language
Comment faire : mode d'emploi
- Génération de documentation,
- PyLize is a Python script that makes the creation of on-screen presentations a matter of a few minutes. It generates a template master document, which can be edited with a text or HTML editor. The master document is then processed by pylize to generate HTML files for every slide plus a file for the table of contents. The presentation can be viewed with any CSS-capable Web browser. pylize is inspired by the Perl program PLies.
- PDFMap is a command line tool and Python library which eases the creation of very high quality maps in PDF format. You can place objects on the maps. Each object can be represented by either a shape or an image, and is scaled and rotated to reflect its original dimensions and orientation. You can make each object clickable in Adobe Acrobat Reader (e.g., to access a Web-enabled application from which you've extracted the data used to create the map).
Besoin de perf : mordu de C++
- Sip
- Swig.org is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages. SWIG is primarily used with common scripting languages such as Perl, Python, Tcl/Tk, Ruby, Guile and MzScheme, however the list of supported languages also includes non-scripting languages such as Java, OCAML, CHICKEN, and C#.
Dernière mise à jour : 2004