La norme de communauté PEP8 et Python est à utiliser ALL_CAPS_CONSTANTS
. C'est un indice visuel commun, utilisé depuis des décennies en C, Java, Perl, PHP, Python, bash et autres langages de programmation et environnements shell. Mais dans le langage en ligne moderne, TOUS LES CAPS SIGNIFIE CRIENT . Et crier est impoli.
Python est cependant plutôt incohérent ALL_CAPS_CONSTANTS
. JavaScript peut avoir Math.PI
, mais Python a math.pi
. Il n'y a pas de constante plus reconnaissable ou durable que π. Ou considérez sys.version_info
la version de Python que vous utilisez. 100% constant sur la durée de votre programme - bien plus que PORT
ou MAX_ITERATIONS
ou d'autres constantes que vous définiriez. Ou à propos sys.maxsize
? La valeur entière maximale de votre plate-forme est constante non pas sur un ou deux programmes, mais sur la durée de vie de votre matériel.
Si ces constantes - y compris certaines comme π et e qui sont des constantes fondamentales de l'univers et ne varieront pas au cours de toute l'éternité - si elles peuvent être en minuscule, eh bien ... les autres constantes le peuvent aussi. Tu peux choisir.
Rappelez-vous que PEP8 est un guide de style. Une ligne directrice, pas une loi. Une directive souvent enfreinte, même par la bibliothèque standard de Python. Et citant une autre directive de base de Python, PEP20 (alias "Le zen de Python"):
- Beau vaut mieux que moche
- La lisibilité compte
- La praticité bat la pureté.
Sur le plan pratique, lorsqu'un programme de YELLY_CONSTANT
et SHOUTY_PARAMETER
commence à râper, il aide à se rappeler que les constantes en majuscules ne sont généralement pas vraiment enduraient idéaux platoniciens , mais les paramètres d'une exécution du programme. Il n’ya rien de vraiment constant à propos de PORT
, SITENAME
et NUMRUNS
, et ils ne doivent pas être gérés comme des programmes globaux autonomes. Par exemple, ils peuvent être déposés dans un dictionnaire sous la forme d'un ensemble de paramètres de programme accessible de manière globale:
config = {
'port': 80,
'sitename': "Bubba's Blog",
'numruns': 100,
}
Python dispose également d’une fonctionnalité de passage de paramètres par mot clé fine qui réduit le besoin d’utiliser APPARENTLY_ANGRY_GLOBAL_VARIABLES
:
def process_data(sitename, port=80, numruns=100):
...
process_data("Bubba's Blog")
En pratique, beaucoup de ces valeurs seront (ou devraient être) lues à partir de fichiers de configuration, de variables d’environnement de système d’exploitation, d’arguments de ligne de commande ou d’autres sources pour satisfaire l’ inversion du principe / modèle de contrôle . Mais c'est une histoire plus large pour un autre jour.