229 votes

Le zen de Python

Il y a le zen de Python écrit par Tim Peters. Il est considéré comme un manuel sommaire de la philosophie de Python. C'est ici:

 >>> 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!
 

Puis-je avoir un exemple de chacun de ces éléments, appliqué à la programmation python réelle?

Je pense qu'un exemple par réponse serait le meilleur, afin que nous puissions voter sur chaque exemple.

117voto

Federico A. Ramponi Points 23106

Les cas spéciaux ne sont pas assez spéciaux pour enfreindre les règles.

Une chaîne de longueur 1 n'est pas assez spéciale pour mériter un type de caractère dédié.

Bien que le caractère pratique bat la pureté.

C'est pourquoi nous avons les chr() et ord() builtins.

85voto

J.T. Hurley Points 493

La belle est mieux que laid.

Voici, Euler Algorithme pour trouver le plus grand dénominateur commun en 4 lignes:

def gcd(x, y):
    while y:
        x, y = y, x % y
    return x

Bien sûr, les mathématiques de la beauté vient de l'algorithme, mais j'aime la façon Python réussit à être précis, concis et explicite dans le même temps. En fait, "élégant" me vient à l'esprit. Bien sûr, n'importe quel langage peut mettre en œuvre qsort en seulement un de plus que C est "Hello World" a certainement une créance sur l'élégance.

78voto

wim Points 35274

J'ai juste remarqué zen n ° 15 n'a pas été couvert encore. Eh bien, est maintenant mieux que jamais.

jamais:

f = open('i_will_stay_open_for_ages.txt', 'w')
f.write('every even number > 2 is the sum of two primes')
assert not 'this sentence is false'
f.close()

maintenant:

with open('i_will_be_closed_right_away.txt', 'w') as f:
  f.write('the sum of two primes > 2 is an even number')
  raise AssertionError('this sentence is false')

Dans le premier exemple, une exception à la bosse de vous sortir de la codeblock avant que le fichier ne peut être fermé. Dans le second, python poliment gérer cela pour vous avec le contexte des gestionnaires. Vous pouvez bien sûr fixer le premier cas à l'aide de try: et finally: blocs, mais belle est mieux que laid.

70voto

Federico A. Ramponi Points 23106

Explicite est mieux qu'implicites.

C'est pourquoi vous ne devriez jamais faire quelque chose comme ceci:

from os import *
print getcwd()

Au lieu de cela, chaque fois que vous appelez une fonction, vous devriez nom de son module de manière explicite:

import os
print os.getcwd()

Dans le cas où vous oubliez de cette meilleure pratique, laisser le dernier koan rappeler à vous:

Les espaces de noms sont un coup de klaxon excellente idée - nous allons faire plus de ceux-là!

Un autre exemple: le paramètre 'self' dans les méthodes. Vous devez toujours mentionner explicitement ce que l'objet que vous travaillez avec.

69voto

Federico A. Ramponi Points 23106

Il devrait y avoir un - et de préférence seulement un moyen évident de le faire. (L'exact contraire de perl devise - il n'y a plus d'une façon de le faire).

De combien de façons pouvez-vous donner aux "itérer sur une séquence" en C++? Parcourir un tableau avec des entiers ou des pointeurs; itération sur STL vecteurs avec différents types d'itérateurs... etc. Si vous voulez être compétent en C++ (et être en mesure de lire d'autres personnes de code), vous devez les apprendre tous. En Python, vous devez apprendre seul:

for element in sequence:

Et n'est-il pas évident?

C'est aussi pourquoi ils sont tomber modules en double dans Python3000 de la bibliothèque standard. Il devrait y avoir un module pour chaque besoin.

[Bien que cette façon peut-être pas évident à première vue, sauf si vous êtes néerlandais: OK, Guido van Rossum est le néerlandais].

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X