0% ont trouvé ce document utile (0 vote)
3 vues12 pages

Introduction au langage Python

Présentation de Python 01. Pour les programmeurs

Transféré par

William Tucilave
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues12 pages

Introduction au langage Python

Présentation de Python 01. Pour les programmeurs

Transféré par

William Tucilave
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Serge BLANCARD

Philosophie

1. Python en quelques lignes

a. D’où vient le nom « Python » ?

Un Python est un serpent aisément reconnaissable ([Link] qui


doit son nom à l’animal monstrueux de Delphe ([Link]
C’est ainsi que cette image forte aisément représentable par l’esprit humain a servi de base pour créer au
langage qui se nommait également « Python » un logo stylisé, mais elle n’a rien à voir avec le choix de ce
nom pour ce langage de programmation.

Il s’agit en réalité d’un hommage rendu aux célèbres « Monty Python »


([Link] une troupe de comiques britanniques qui après avoir connu le
succès avec « Monty Python’s flying circus » réalisa un premier film, sélection de leurs précédents
sketches « La première folie des Monty Python » et enchaîna avec trois films de référence qui sont « Sacré
Graal ! », « La vie de Brian » et « Le sens de la vie ».

Il faut noter que l’affiche française du tout premier film fut réalisée par l’excellent Gotlib, ce qui ne peut
qu’être un gage de qualité.

Quant à savoir comment les Monty Python ont choisi leur nom, et en particulier le mot Python, il faut
entrer au cœur de la légende, et cela sort du cadre strict de cet ouvrage (mais c’est déjà pas mal de
pouvoir parler de télévision, de cinéma et même un tout petit peu de bande dessinée dans un ouvrage
informatique).

b. Présentation technique

Python est un langage de programmation interprété, multiparadigme, de haut niveau à typage dynamique
fort, doté d’une gestion automatique des ressources, d’une forte introspection et d’un système de gestion
des exceptions.

Il est libre et gratuit, fonctionne sur toutes les plateformes, est apparu en 1990 et possède plusieurs
implémentations, dont CPython, Jython, IronPython et PyPy.

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD -1-
Serge BLANCARD

Sa licence est la « Python Software Foundation License ». Elle est relativement proche de la licence BSD et
compatible avec la licence GPL.

Sa syntaxe est minimaliste, explicite, claire, simple, suffisamment proche du langage naturel pour qu’un
algorithme soit compris dès la première lecture par un lecteur qui connaît l’anglais.

Un des avantages de ce langage est que l’élaboration d’une réflexion, d’un algorithme composé de mots,
se décline quasiment naturellement.

c. Présentation conceptuelle

Python est un langage créé pour être simple. Il s’oriente autour d’une philosophie qui donne des directions
très limpides tout en restant extrêmement souple. Il laisse beaucoup de latitude aux développeurs, ne
cherchant pas à les entraver par une manière ou une autre, même pour les meilleures raisons du monde.

Par contre, il prend à sa charge et résout à la place de développeur l’ensemble des problématiques de bas
niveau. En effet, ces problématiques sont récurrentes, parfaitement connues des développeurs
chevronnés qui peuvent proposer pour chacune LA meilleure solution et ainsi proposer une intégration au
langage de haut niveau efficace qu’est Python.

Par ce biais, le développeur qui utilise Python sait pertinemment que s’il réalise correctement ses
algorithmes à haut niveau, Python les traite de la meilleure manière possible, gérant correctement la
mémoire (ramasse-miettes), et les autres ressources. De cette manière, sa productivité est grandement
améliorée.

Par conséquent, Python est un excellent moyen de s’initier à la maîtrise des concepts de base de la
programmation de haut niveau, sans être pollué par des problématiques de bas niveau.

2. Comparaison avec d’autres langages

a. Shell

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD -2-
Serge BLANCARD

Comme les langages Shell (sh, csh, ksh, zsh, bash...), Python permet de réaliser des scripts
d’administration système. Dans des environnements sans interface graphique, avec des contraintes
systèmes parfois fortes au sein desquelles Shell a su devenir incontournable, Python peut aisément le
remplacer.

La console Python peut également remplacer avantageusement la ligne de commande. Cela est surtout
flagrant pour des opérations complexes.

Voici les avantages de Python :

ˇ
performance meilleure (pas forcément important pour des scripts) ;
ˇ
syntaxe (les langages Shell préférant la concision à la clarté) ;
ˇ
rapidité de développement en Python ;
ˇ
pour des scripts ambitieux, le développement Python permet d’aller plus loin ;
ˇ
aller au-delà des limitations du langage Shell.

b. Perl

Perl s’est imposé, il y a un certain temps, comme une bonne alternative aux langages Shell, et il permet de
couvrir un périmètre important (remplacement de sed, …) en permettant la manipulation de flux.
Cependant, comme les langages Shell, Perl est un langage de niche, dans le sens où il est généralement
cantonné à la réalisation de scripts système (même si des applications plus importantes existent dans
d’autres domaines).

De plus, Perl dispose d’une syntaxe encore plus optimisée pour la concision et propose les one-liners. Si
leur écriture est stimulante intellectuellement, force est de constater que leur relecture, même peu de
temps après, est réellement impossible.

Python couvre un périmètre fonctionnel plus étendu que Perl, avec des performances exactement
similaires. En effet, à bas niveau, on constate des variations d’un côté ou de l’autre en fonction des
fonctionnalités, Perl étant meilleur sur les expressions régulières et Python sur le reste, les deux étant
extrêmement lents par rapport au C. Par contre, Python a beaucoup plus d’avantages :

ˇ
meilleure maintenabilité ;
ˇ
périmètre fonctionnel beaucoup plus large (quitte à apprendre un nouveau langage, autant s’en
servir dans le plus grand nombre de domaines) ;

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD -3-
Serge BLANCARD

ˇ
documentation plus fournie (communauté plus importante) ;
ˇ
beaucoup plus extensible.

c. C, C++

Il faut comparer ce qui est comparable. Python est un langage interprété de haut niveau dynamiquement
typé. C est un langage compilé de bas niveau statiquement typé. Clairement, l’origine et l’objectif de ces
deux langages ne sont pas du tout les mêmes.

En conséquence, C et Python sont complémentaires. En effet, l’implémentation la plus courante de Python


est CPython, mais une partie non négligeable des librairies Python est écrite en C, certaines étant
simplement des bindings vers des bibliothèques C.

Par exemple, le module StringIO (Python 2.x) est également disponible en C sous le nom de CstringIO. Les
bibliothèques graphiques du C sont celles qui sont utilisées par Python (PyGTK utilise GTK+).

Aujourd’hui, C n’est plus utilisé que pour certaines niches comme l’administration système ou l’embarqué,
il est largement supplanté par son successeur, C++. Donc la comparaison de C avec Python n’est pas
complète si C++ n’est pas évoqué.

C++ ajoute à C le paradigme objet, mais améliore également beaucoup d’autres aspects. Si C est une
référence au niveau de la performance, C++ peut l’être encore plus sur certaines parties.

Si CPython est une implémentation au-dessus de C, il lui est également possible d’utiliser C++. Par
exemple, PyQt utilise Qt et wxPython utilise wxWidgets.

L’interaction entre C++ et Python est également forte et ces deux langages peuvent être utilisés
conjointement.

Globalement, C et C++ demandent dix fois plus de temps de développement que le même programme en
Python, mais ils sont beaucoup plus performants. C et C++ demandent de gérer des problématiques de
bas niveau que Python traite seul et la syntaxe est plus complexe. Un développement en C ou C++
nécessite d’avoir des développeurs de très bon niveau qui ont une très grande maîtrise de ces
problématiques là, avant d’avoir une maîtrise des bibliothèques C.

Python est plus souple, sa syntaxe permet une accessibilité plus facile et l’implémentation

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD -4-
Serge BLANCARD

d’algorithmes complexe se fait beaucoup plus vite.

D’autre part, pour ceux qui doivent impérativement pratiquer C ou C++, Python est une excellente solution
de prototypage, permettant une réduction des coûts significative tout en disposant d’un résultat
visuellement identique, puisque les librairies utilisées sont les mêmes.

Le développement peut également se réaliser directement en Python, avant d’identifier les parties
sensibles à redévelopper en C/C++ pour des gains de performance.

Pour résumer, les différences sont celles-ci :

ˇ
C/C++ est beaucoup plus performant que Python.
ˇ
Python supporte plus de paradigmes que C++ et que C.
ˇ
Python est plus simple que C/C++.
ˇ
Le développement Python est dix fois plus rapide qu’en C/C++.
ˇ
Le périmètre fonctionnel est quasiment identique.
ˇ
Python peut utiliser des bindings sur des librairies C/C++.
ˇ
Des programmes en C/C++ peuvent également embarquer du Python.
ˇ
Au final, les deux langages sont faits pour travailler conjointement.

d. Java

Java est un langage de haut niveau statiquement typé. Il a l’avantage d’être extrêmement répandu et
d’intégrer ses propres bibliothèques qui couvrent un large périmètre fonctionnel. Il a le désavantage de
tourner autour de l’unique philosophie du « pure-Java » qui fait que plutôt que d’utiliser des bibliothèques
ou composants extrêmement performants et éprouvés mais non-Java, il va toujours préférer les
redévelopper en Java.

La doctrine de Java est extrêmement contraignante, les architectes aiment à pouvoir disposer d’entraves
de manière à tenter de canaliser leurs développeurs. Ces derniers, confrontés à des problématiques non
triviales à résoudre trouvent toujours un moyen de parvenir à leurs fins, posant ainsi de nouvelles
difficultés. Au contraire, Python est fondé sur une philosophie que l’on est libre d’adopter ou non.

Le cœur de Java est sa machine virtuelle. Elle est extrêmement longue à charger, mais une

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD -5-
Serge BLANCARD

fois que ce travail est fait, elle est relativement rapide.

Ceci disqualifie donc Java en tant que langage de scripting, par exemple, puisqu’il est gênant d’attendre
plusieurs secondes, de consommer des ressources gigantesques pour n’exécuter qu’un tout petit script
qui n’a besoin que de quelques millisecondes et d’un tout petit peu de mémoire.

D’ailleurs, ce n’est pas sur ce segment de marché que se pose Java, mais plutôt sur la création
d’applications lourdes et sur celui des serveurs Web.

Pour les applications graphiques, Java s’est répandu car il offre la possibilité d’en développer plus
facilement qu’avec C/C++ (en tout les cas à l’époque où Java s’est imposé), grâce à des IDE bien pensés
et des librairies éprouvées.

Python permet une offre plus proche de celle du C/C++ puisqu’il utilise ses librairies, et permet l’utilisation
de logiciels tiers pour la création des interfaces.

En ce qui concerne le développement Web, Python a proposé très tôt des solutions extrêmement avant-
gardistes et a continué dans cette voie. Les solutions que propose Python aujourd’hui sont celles que
proposera Java dans quelques années.

Quel que soit le trafic du site, son importance, et en se cantonnant simplement aux coûts, il faut prendre
deux paramètres en compte : le coût du développement et celui de l’hébergement.

Python permet des temps de développement cinq fois plus rapide que Java et est moins cher, le tout pour
des performances identiques.

Pour des problématiques de très grand trafic, de haute disponibilité, de tenue à la charge (termes très
proches et très souvent entendus), que l’on choisisse l’une ou l’autre des technologies, la seule chose qui
compte est de confier le travail à quelqu’un d’expérimenté, qui sait tirer le meilleur de la machine virtuelle
de Python ou de Java et utiliser les meilleurs outils tiers (Apache, Squid, Varnish…).

Au final, ce qui reste, c’est le coût de l’infrastructure, et elle est jusqu’à deux fois moins importante pour
une application écrite en Python.

La grande différence entre Python et Java est que le nombre de développeurs formés à Python est
beaucoup plus petit, et que les solutions Python ne bénéficient pas d’une aussi large diffusion.

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD -6-
Serge BLANCARD

La très grande force de Java est d’avoir été porté par Sun qui a été un acteur du libre très important, un
pilier essentiel, mais aussi par des industriels reconnus tel qu’IBM qui a positionné Java au cœur de sa
stratégie.

Il est également à noter que Python propose une implémentation en Java, qui se nomme Jython. Celle-ci
permet d’obtenir du bytecode lisible par la machine virtuelle Java. Elle a une très grande ambition et de
grandes exigences (fonctionnalités, performances…) mais sa communauté est plus faible. Ses numéros
de versions collent à ceux de CPython, et au moment où ces lignes sont écrites, la sortie de la version 2.7
de Jython est imminente. Le passage à la version 3 est envisagé et se fera probablement directement sur
la version 3.3, qui intègre des dispositifs pour faciliter la transition entre les deux branches.

Un autre axe de développement de Java est d’ailleurs la création de nouveaux langages qui se fondent sur
cette machine virtuelle qui en est le cœur.

Les différences entre Java et Python peuvent se résumer ainsi :

ˇ
Java et Python sont globalement aussi performants l’un que l’autre (en termes de vitesse
d’exécution de codes comparables et en excluant le JIT).
ˇ
la machine virtuelle de Java est beaucoup plus longue à charger.
ˇ
la consommation mémoire de Java est beaucoup plus grande.
ˇ
un développement Python est cinq fois moins long que le même en Java.
ˇ
Java est beaucoup plus implanté que Python à la fois dans les entreprises et dans l’esprit des
recruteurs et managers.
ˇ
Python intègre alors que Java réécrit.
ˇ
La philosophie Python et la doctrine Java sont quasiment opposées.

e. PHP

PHP est un langage qui a su s’imposer relativement tôt dans le développement Web par les possibilités
offertes, sa simplicité, et son intégration facile au sein de pages HTML.

Aujourd’hui, les possibilités offertes se sont réduites, pour cause de problématiques importantes de
sécurité, mais le langage a bien grandi, avec beaucoup de bibliothèques. PHP 5 a permis de mettre au
point une sémantique objet à peu près correcte à partir de la version 5.3, dispose de frameworks qui ont
su s’imposer (avec les bonnes pratiques qui

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD -7-
Serge BLANCARD

vont avec).

Globalement, PHP est simplement une collection de fonctions écrites en C avec un analyseur et une
grammaire minimaliste. L’écriture en C rend le langage rapide, mais cela signifie que chaque fonction a
une et une seule utilité et que pour chaque cas, il faut bien utiliser la fonction qui va bien, et pas une autre,
sans quoi la performance n’est pas optimale. Le souci est que PHP est constitué de plusieurs milliers de
telles fonctions, sans notion de module ou d’introspection qui permettrait de faciliter le développement.

Aujourd’hui, mettre des inclusions de PHP au sein de fichiers HTML n’est pas recommandé. Une
application PHP doit utiliser un framework ou se créer son propre bootstrap et système MCV et c’est le
PHP qui génère le HTML.

Python a démontré depuis quelques années sa supériorité sur les frameworks Web, mais ne s’est pas
encore imposé, même si de plus en plus de petits éditeurs, d’indépendants ou de web agency
abandonnent PHP pour Python.

PHP souffre d’une concurrence avec ASP qui est une solution identique largement inspirée par lui, mais
avec un éditeur derrière. Il souffre également d’une image de langage pour débutant qui n’est pas méritée,
mais qui est visible sur le web lorsque de trop nombreux forums proposent, pour des questions légitimes,
des réponses qui marchent mais qui présentent de trop nombreuses mauvaises pratiques.

PHP dispose directement de la puissance, de la stabilité et de la réputation d’Apache qui est une solution
de référence.

Le comparatif est le suivant :

ˇ
Python, comme PHP peut être hébergé par Apache.
ˇ
Python est un langage multiparadigme dont le paradigme objet au contraire de PHP qui se
contente de proposer une sémantique objet.
ˇ
PHP et Python sont tous les deux accessibles et demandent un bagage théorique suffisant (et
aucun d’entre eux ne devrait être abordé sans ce bagage).
ˇ
le développement Python est deux à trois fois plus rapide que le même sous PHP.
ˇ
les frameworks Python sont extrêmement aboutis et modulaires.
ˇ
PHP dispose avec Drupal, Magento ou autre, de solutions de référence.

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD -8-
Serge BLANCARD

ˇ
Python est plus performant pour les opérations courantes et le code de l’application est
interprété et compilé uniquement au démarrage du serveur et non pas à chaque requête.

3. Grands principes

a. Le zen de Python

La philosophie peut être résumée par « Le Zen de Python » ([Link]

ˇ
beau est mieux que moche ;
ˇ
explicite est mieux qu’implicite ;
ˇ
simple est mieux que complexe ;
ˇ
complexe est mieux que tortueux ;
ˇ
linéaire est mieux qu’imbriqué ;
ˇ
clairsemé est mieux que compact ;
ˇ
la lisibilité est importante ;
ˇ
les cas particuliers ne le sont pas suffisamment pour briser les règles ;
ˇ
le pragmatisme prime sur la pureté ;
ˇ
bien que la fonctionnalité prime sur la pureté ;
ˇ
les erreurs ne doivent jamais être silencieuses ;
ˇ
à moins de les avoir explicitement réduites au silence ;
ˇ
confronté à l’ambiguïté, refuse de deviner ;
ˇ
il devrait y avoir une - et de préférence une seule - façon évidente de procéder ;
ˇ
bien qu’elle n’apparaisse pas évidente de prime abord à moins d’être néerlandais ;
ˇ
mieux vaut maintenant que jamais ;
ˇ
bien que jamais est souvent mieux que « tout de suite » ;
ˇ
si l’implémentation est difficile à expliquer, elle est une mauvaise idée ;
ˇ
si l’implémentation est facile à expliquer, il se pourrait qu’elle soit une bonne

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD -9-
Serge BLANCARD

idée ;
ˇ
les espaces de nommage sont une idée qui va faire du bruit, faisons-en plus !

Tout est dit.

Ce texte est un des premiers à faire référence et explique pour beaucoup les choix adoptés par les
concepteurs de Python.

Certains passages paraissent être des évidences, mais après expérience, ils font référence à des
problématiques que tout développeur peut rencontrer.

b. Le développeur n’est pas stupide

La plupart des langages de programmation perdent une très grande partie de leur énergie à borner le
chemin pour le développeur pour lui interdire certains comportements, pour s’assurer qu’il utilise
réellement les outils du langage de la façon dont il est prévu qu’ils soient utilisés.

Dans l’idée, cela correspond tout à fait aux besoins des architectes logiciels qui souhaitent s’assurer que
les développements sont réalisés par leurs développeurs de la manière dont ils ont souhaité les voir
développer. Dans la pratique, il en est tout autrement, puisque le développeur bridé ou bloqué va tout faire
pour trouver une solution à un problème immédiat qu’il croit évident mais dont la solution lui échappe à
cause des entraves du langage ou de l’architecture.

Python, au contraire, laisse le champ libre au développeur. Il y a certes des bornes, des limites, des
chemins tracés, mais ils se trouvent dans la documentation et c’est au développeur d’aller faire l’effort de
se former. En contrepartie, s’il est novateur, s’il maîtrise bien ce qu’il fait, il peut trouver des solutions
élégantes à tout type de problèmes, même ceux non prévus par le concepteur du langage ou d’une
bibliothèque.

Rien n’est fait pour bloquer le développeur, à quelque endroit que ce soit. Et cela n’est pas incompatible
avec une application sécurisée, bien au contraire, ces deux aspects étant totalement disjoints.

En d’autres termes, d’une part Python ne fait rien pour brider le développeur, mais la documentation du
code est le pilier pour des développements utiles et réutilisables.

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD - 10 -


Serge BLANCARD

c. Documentation

Cela mène directement au point suivant : utiliser correctement et abondamment les outils mis à
disposition par Python pour documenter le code, à savoir les docstring.

Celles-ci peuvent être utilisées de différentes manières et peuvent même servir à déposer des tests
unitaires comme présenté dans cet ouvrage.

Les docstring peuvent être mises partout : fonctions, classes, méthodes, modules… Idéalement, elles
doivent être systématiquement écrites.

d. Python est livré piles incluses

Python est un langage de programmation qui est extrêmement complet, puisqu’il permet d’implémenter
beaucoup d’algorithmes, dispose d’une grammaire exceptionnelle répondant naturellement à beaucoup de
besoins classiques.

Mais ce qui en fait un langage utile est qu’il dispose d’une bibliothèque standard exceptionnelle
permettant de couvrir un périmètre fonctionnel impressionnant. Grâce à elle, Python peut interagir avec
d’autres langages, avec des bases de données, des annuaires, des fichiers de données (documents texte
brut, opendocument (fichiers XML zippés), images, xml, cvs…). Il peut également interagir avec le système
de fichier, le réseau, Internet…

Et si cette bibliothèque standard ne suffit pas, il dispose également de bibliothèques tierces qui peuvent
être distribuées sous forme de paquets installables par le gestionnaire de paquets de votre distribution ou
encore par un gestionnaire spécifique à Python.

En d’autres termes, Python a tout ce qu’il faut pour répondre à votre besoin, et il en dispose sous une
licence libre et gratuite.

e. Duck Typing

L’analogie provient de la phrase : « Si je vois un animal qui vole comme un canard, cancane comme un
canard, et nage comme un canard, alors cet animal doit être un canard ».

Cela signifie que le fond est plus important que la forme, que le fonctionnel est plus important que le
technique.

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD - 11 -


Serge BLANCARD

Ainsi, la liste des méthodes et des attributs d’un objet définissent mieux l’objet que son type.

Type hinting

Il s’est développé, en renfort avec le duck typing, la notion de type hinting. Il s’agit de préciser le type des
variables, des attributs ainsi que des paramètres et du retour d’une fonction ou méthode. L’utilisation de
cette technique permet de donner à Python toutes les qualités d’un langage statique au niveau de la
sécurité de programmation, tout en laissant à Python son caractère dynamique. On fait reposer cette
notion de sécurité de programmation sur l’utilisation accrue des outils d’intégration continue associés
avec des modules tirant parti du type hinting. Ceci sera présenté dans le chapitre Déclarations, dédié à la
qualité.

f. Notion de code pythonique

L’esprit même du langage se retrouve dans les paragraphes précédents et cela doit également servir de fil
conducteur au développeur utilisant Python. À la fois pour comprendre l’outil utilisé, mais aussi pour
réaliser des développements homogènes avec le langage.

Lorsqu’un code est conforme à ces règles, il suit alors la philosophie du langage, et il respecte les
fondamentaux. Autrement dit, il est pythonique.

© Editions ENI - Tous droits réservés - Copie personnelle de Serge BLANCARD - 12 -

Vous aimerez peut-être aussi