Un terme revient souvent lorsqu'on fouille la documentation, les forums ou autres blogs concernant le langage Python: 'Pythonic'. On caractérise ainsi une manière de programmer qui tire toute la puissance de Python tout en respectant des règles de simplicité et de lisibilité du code qui sont à la base de la philosophie du langage. Ces règles sont très bien exprimées par Tim Peters, guru Python, dans un court poème intitulé 'The Zen of Python'.
Ce poème exprime tellement bien la philosophie du langage qu'il a été intégré à la librairie standard et que vous le verrez s'afficher dans la console en exécutant la commande suivante:
>>> import this
The Zen of Python, by Tim Peters
- Beautiful is better than ugly.
- Explicit is better than implicit.
- Simple is better than complex.
- Complex is better than complicated.
- Flat is better than nested.
- Sparse is better than dense.
- Readability counts.
- Special cases aren't special enough to break the rules.
- Although practicality beats purity.
- Errors should never pass silently.
- Unless explicitly silenced.
- In the face of ambiguity, refuse the temptation to guess.
- There should be one-- and preferably only one --obvious way to do it.
- Although that way may not be obvious at first unless you're Dutch.
- Now is better than never.
- Although never is often better than right now.
- If the implementation is hard to explain, it's a bad idea.
- If the implementation is easy to explain, it may be a good idea.
- Namespaces are one honking great idea -- let's do more of those!
Ces 19 phrase veulent avec humour rappeler que l'écriture du code est la base de l'activité de programmation. C'est lui qui donne vie au logiciel et le garder simple à lire et à comprendre aidera à le maintenenir et à le faire évoluer. Un défi de tous les jours pour les développeurs que ce court texte veut aider, en clin d'oeil, dans les choix parfois difficiles.
L'indentation comme base du langage Python
Un autre clin d'oeil amusant, (le nom de Python faut il le rappeler vient des comiques anglais Monty Python dont l'esprit imprègne le langage), est donné via l'usage des crochets {}. Contrairement à Java ou C++, la définition de blocs d'instructions en Python se fait par l'indentation du code et non pas par les crochets. Cette pratique qui facilite la lisibilité du code (chaque programmeur est ainsi forcé d'indenter son code correctement) est parfois un peu déroutante pour les débutants. Nombreux ont peut être été tentés de trouver un module permettant d'accepter les crochets pour définir des blocs d'instructions. En fait Python en fournit un avec le package __future__ qui groupe les évolutions prévues du langage en vue de leur acceptation par les développeurs. Exécutez ainsi la commande suivante:
>>> from __future__ import brace
module qui heureusement pour vous (vous verrez une fois que l'on en a pris l'habitude on ne peut plus se passer de l'indentation signifiante du code) lèvera l'erreur suivante:
SyntaxError: not a chance
Tim Peters l'a dit: La lisibilité du code compte. Pas question de l'abandonner pour séduire des développeurs java ou c++ rétissants à la syntaxe Python.
Python prêt à tout pour séduire les développeurs Visual Basic?
Pourtant, en guise de poisson d'avril 2004, des développeurs ont proposé d'inclure le mot clé goto, célèbre pour faciliter la programmation spaghetti. Le module goto fonctionne parfaitement en Python et permet d'écrire un programme pour calculer les carrés des 10 premiers entiers aussi magnifique que le suivant :
from goto import goto, label
i = 0
label .A
i = i + 1
if i != 11:
goto .C
if i == 11:
goto .B
goto .A
label .B
print "Programme termine"
goto .END
label .C
print i, " au carre = ", i * i
goto .A
label .END
Le code est effrayant. Mais rassurez vous, goto n'est qu'un poisson d'avril et son utilisation est fortement déconseillée par son auteur lui-même. Le contre exemple parfait de l'esprit Pythonic.
Tim Peters a très bien défini 'Pythonic' dans son poème et c'est devenu la définition presque officielle du terme. Pour une définition un peu plus pratique, je vous recommande cette question sur StackOverflow : Zen of Python qui liste des illustrations de chacune des phrases du poème.