• 4 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 02/05/2018

Devenez zen avec la PEP 20

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

 

La PEP 20

Dans le chapitre précédent vous avez découvert la PEP 8 qui est le guide de style pour écrire un code de qualité en Python. Cette PEP intimement liée à la PEP 20, également appelée le "Zen de Python". Il s'agit de 19 aphorismes écrits par Tim Peters et reflétant la philosophie de Python. Vous pouvez les voir comme des guides de conduite vous aidant à écrire du meilleur code et à bien comprendre l'état d'esprit du langage.

Les voici, accompagnés d'une humble traduction :

  • Le beau est préférable au laid. - Beautiful is better than ugly.

  • L'explicite est préférable à l'implicite. - Explicit is better than implicit.

  • Le simple est préférable au complexe. - Simple is better than complex.

  • Le complexe est préférable au compliqué. - Complex is better than complicated.

  • L'horizontal est préférable à l'imbriqué. - Flat is better than nested.

  • L'aéré est préférable au dense. - Sparse is better than dense.

  • La lisibilité compte. - Readability counts.

  • Les cas spéciaux ne le sont pas assez pour transgresser les règles. - Special cases aren't special enough to break the rules.

  • Sauf si le cas pratique bat le cas théorique. - Although practicality beats purity.

  • Les erreurs ne devraient jamais arriver silencieusement. - Errors should never pass silently.

  • Sauf si on les a explicitement rendues silencieuses. - Unless explicitly silenced.

  • En cas de doute, ne tentez pas de deviner. - In the face of ambiguity, refuse the temptation to guess.

  • Il devrait y avoir une, et de préférence une seule, manière évidente de le faire. - There should be one - and preferably only one - obvious way to do it

  • Même si cette manière peut ne pas sembler évidente au premier abord sauf si vous êtes nééerlandais. - Although that way may not be obvious at first unless you're Dutch.

  • Ce qui est fait maintenant est préférable à ce qui ne sera jamais fait. - Now is better than never.

  • Même si jamais est souvent mieux que tout de suite. - Although never is often better than right now.

  • Si l'implémentation est difficile à expliquer, c'est que c'est une mauvaise idée. - If the implementation is hard to explain, it's a bad idea.

  • Si l'implémentation est facile à expliquer, c'est que c'est peut-être une bonne idée. - If the implementation is easy to explain, it may be a good idea.

  • Les espaces de noms sont une brillante idée, créons-en plus ! - Namespaces are one honking great idea, let's do more of those!

Il est très courant que des développeurs Python s'y réfèrent pour commenter du code donc ne vous étonnez pas ! 😉

 

En pratique

Rien de tel que la pratique pour bien comprendre ce que ces aphorismes impliquent ! Lee Wei Yeong, un développeur singapourien, a créé des exemples mettant en oeuvre les aphorismes.

Voici les trois premiers.

 

Le beau est préférable au laid

"""
Give me a function that takes a list of numbers and returns only the
even ones, divided by two.
"""
#-----------------------------------------------------------------------
# Wrong example
halve_evens_only = lambda nums: map(lambda i: i/2, filter(lambda i: not i%2, nums))
#-----------------------------------------------------------------------
# Beautiful is better than ugly.
def halve_evens_only(nums):
    return [i/2 for i in nums if not i % 2]
#-----------------------------------------------------------------------

 

L'explicite est préférable à l'implicite

"""
Load the cat, dog, and mouse models so we can edit instances of them.
"""
#-----------------------------------------------------------------------
# Wrong example
def load():
from menagerie.cat.models import *
from menagerie.dog.models import *
from menagerie.mouse.models import *
#-----------------------------------------------------------------------
# Explicit is better than implicit.
def load():
from menagerie.models import cat as cat_models
from menagerie.models import dog as dog_models
from menagerie.models import mouse as mouse_models
#-----------------------------------------------------------------------

 

Le simple est préférable au complexe

"""
Can you write out these measurements to disk?
"""
measurements = [
    {’weight’: 392.3, ’color’: ’purple’, ’temperature’: 33.4},
    {’weight’: 34.0, ’color’: ’green’, ’temperature’: -3.1},
]
#-----------------------------------------------------------------------
# Wrong example
def store(measurements):
    import sqlalchemy
    import sqlalchemy.types as sqltypes
    db = sqlalchemy.create_engine(’sqlite:///measurements.db’)
    db.echo = False
    metadata = sqlalchemy.MetaData(db)
    table = sqlalchemy.Table(’measurements’, metadata,
        sqlalchemy.Column(’id’, sqltypes.Integer, primary_key=True),
        sqlalchemy.Column(’weight’, sqltypes.Float),
        sqlalchemy.Column(’temperature’, sqltypes.Float),
        sqlalchemy.Column(’color’, sqltypes.String(32)),
    )
    table.create(checkfirst=True)
    for measurement in measurements:
        i = table.insert()
        i.execute(**measurement)
#-----------------------------------------------------------------------
# Simple is better than complex.
def store(measurements):
import json
with open(’measurements.json’, ’w’) as f:
    f.write(json.dumps(measurements))
#-----------------------------------------------------------------------
6

 

Découvrez-les tous ici ou dans une version en pdf

 

 

Exemple de certificat de réussite
Exemple de certificat de réussite