Comparé à des langages tels que Perl, Python possède un nombre limité de constructions de contrôle:
- seulement
if
et non unless
,
- seulement
for
que itère sur des séquences et pas foreach
ou C-style for
,
- seulement
while
cela vérifie une condition à chaque boucle et non do-while
,
- seulement
if-elif
et non switch
,
- il n'y a qu'une seule construction de commentaire, le
#
, et pour chaque ligne, vous pouvez dire si elle est commentée ou non, sans regarder les lignes précédentes.
En outre, il existe presque une façon d'indenter votre source; la plupart des cas d'indentation créative sont syntaxiquement exclus.
Cela facilite l'analyse d'une source Python pour les humains.
Il existe des tentatives pour être minimal mais complet dans les types intégrés et la bibliothèque standard.
- pour la liste mutable, vous utilisez le seul type intégré
list
; c'est O (1) pour la plupart des opérations, et vous n'avez jamais à choisir la bonne implémentation,
- pour les listes immuables, vous devez également utiliser le
tuple
type,
- pour les cartes, vous utilisez le seul
dict
outil intégré qui est sacrément efficace dans la plupart des cas, inutile de vous demander quelle implémentation utiliser.
Python 3 étend cela aux entiers: quelle que soit la taille de votre entier, vous utilisez le même type et ne vous souciez jamais de la contrainte.
Python essaie d'éviter le sucre syntaxique. Mais parfois, il ajoute du sucre syntaxique simplement pour mettre en évidence le moyen évident. Vous pouvez écrire if foo is not None
au lieu de if not (foo is None)
parce que 'is not' est une casse spéciale. Lit toujours foo is not None
facilement, ne peut pas être mal interprété, et vous n'avez pas à penser, vous écrivez simplement la chose évidente.
Bien sûr, la plupart des choses plus complexes en Python peuvent être effectuées de plusieurs manières. Vous pouvez ajouter des méthodes aux classes par déclaration ou par simple affectation d’emplacement, vous pouvez transmettre des arguments à des fonctions de différentes manières, etc. Tout simplement parce que les éléments internes du langage sont principalement exposés.
La clé est qu'il y a toujours un moyen qui se veut être le meilleur, le "cover-all". Si d'autres moyens existent, ils n'ont pas été ajoutés en tant qu'alternatives égales (comme if
et unless
), mais ont simplement exposé le fonctionnement interne. Lentement mais sûrement, de telles alternatives sont obsolètes (pas éliminées!) En améliorant le meilleur mécanisme connu.
Les décorateurs encapsulent les appels de fonction AOP. Avant la version 2.6, vous deviez utiliser __metaclass__
membre magique pour déclarer la métaclasse d'une classe. Maintenant, vous pouvez aussi utiliser la même syntaxe de décorateur. Avant la version 3.0, vous disposiez de deux types de chaînes, orientées octets et Unicode, que vous pouviez mélanger par inadvertance. Vous avez maintenant le seul Unicode str
et le seul transparent binaire bytes
, que vous ne pouvez pas mélanger par erreur.
"""
commentaires (docstrings). Celles-ci s'étendent sur plusieurs lignes.