Quelques règles à suivre pour produire un code qui sastisfait les normes proposées par les développeurs de Python, consultables dans leur intégralité dans la langue de Shakespeare ici. En voici un résumé.
def __init__(self, width, height,
color='black', emphasis=None, highlight=0):
if width == 0 and height == 0 and \
color == 'red' and emphasis == 'strong' or \
highlight > 100:
raise ValueError("sorry, you lose")
if width == 0 and height == 0 and (color == 'red' or
emphasis is None):
raise ValueError("I don't think so")
Blob.__init__(self, width, height,
color, emphasis, highlight)
# -*- coding: iso-8859-15 -*-
* Faire les imports en début de fichier, après la docstring du module. * importer les modules ou paquetages sur des lignes séparées. Ne pas faire :
import sys, os
mais :
import os import sys
Cependant, pour des modules d’un même paquetage, on peut utiliser la syntaxe suivante :
from subprocess import Popen, PIPE
* Regrouper les imports, en commençant par les librairies standards, puis les librairies tierces et enfin, les librairies locales, en séparant les groupes par un espace.
from foo.bar.mon_module import Ma_classe
En cas d’erreur, utiliser :
import foo.bar.mon_module
Et acceder à la classe comme suit :
mon_module.Ma_classe()
Les exemples suivants de ce qu’il faut et ne faut pas faire sont explicites :
spam( ham[ 1 ], { eggs: 2 } )
préférer :
spam(ham[1], {eggs: 2})
if x == 4 : print x , y ; x , y = y , x
préférer :
if x == 4: print x, y; x, y = y, x
spam (1) dict ['key'] = list [index]
préférer :
spam(1) dict['key'] = list[index]
x = 1 y = 2 long_variable = 3
i=i+1 submitted +=1 x = x*2 - 1 hypot2 = x*x + y*y c = (a+b) * (a-b)
préférer :
i = i + 1 submitted += 1 x = x * 2 - 1 hypot2 = x * x + y * y c = (a + b) * (a - b)
def complex(real, imag = 0.0):
return magic(r = real, i = imag)
préférer :
def complex(real, imag=0.0):
return magic(r=real, i=imag)
* Ne pas regrouper des déclarations sur une même ligne :
if foo == 'blah': do_blah_thing() do_one(); do_two(); do_three()
préférer :
if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()
#.
x = x + 1 # Increment x
Les docstring sont des chaînes de caractères que Python utilise pour générer la documentation via pydoc. Les bonnes pratiques sont détaillées dans la PEP0257.
La docstring est la première ligne qui suit la ligne de définition de la classe, la fonction. La syntaxe est la suivante :
def my_method():
"""Return a foobang
Optional plotz says to frobnicate the bizbaz first.
"""
Ou si le commentaire tient sur une ligne :
def my_method():
"""Return a foobang."""
Les conventions de nommages utilisées en Python sont :
Notamment pour des raisons de compatibilité avec certains OS, les modules, qui portent le nom du fichier, doivent avoir un nom court, en minuscules et sans underscores.
Utiliser la convention CapWords, préfixé un underscore si la classe est à usage interne.
exemples :
class UneClasseExterne: class _UneClasseInterne:
Pour les classes d’exceptions qui attrapent les erreurs, utiliser le suffixe Error.
class MessageError(Exception):
"""Base class for errors in the email package."""
Les noms de fonctions sont en minuscules et avec des underscores.
Idem que pour les noms de fonctions, avec un underscore pour une méthode privée.
Le premier argument d’une méthode d’instance est self. Pour une méthode de classe, utiliser cls.
voir les properties dans les nouvelles classes
if isinstance(une_chaine, basestring):
...
Tous les modules, même les init.py de packages doivent comporter une docstring.
#! /usr/bin/env python # -*- coding: iso-8859-15 -*- # Copyright (C) 2006 Aiddiag Team <stanislas.guerra@etu.univ-lille2.fr> # """here the docstring. """ __version__ = '0.1' __author__ = "Stanislas Guerra" __author_email__ = "first-name dot last-name @ gmail.com" __date__ = "2006-07-07" # here the imports # here the code # the module's demonstration. if __name__ == '__main__': print "Entering demo."