A norma da comunidade PEP8 e Python é usar ALL_CAPS_CONSTANTS
. É uma pista visual comum, usada há décadas em C, Java, Perl, PHP, Python, bash e outras linguagens de programação e ambientes de shell. Mas no jargão online moderno, TODOS OS TAMPAS SIGNIFICA GRITOS . E gritar é rude.
Python é, no entanto, bastante inconsistente ALL_CAPS_CONSTANTS
. JavaScript pode ter Math.PI
, mas Python tem math.pi
. Não há constante mais reconhecível ou duradoura que π. Ou considere sys.version_info
, a versão do Python em que você está executando. 100% constante durante a vida do seu programa - muito mais do que PORT
ou MAX_ITERATIONS
ou outras constantes que você definir. Ou que tal sys.maxsize
? O valor inteiro nativo máximo da sua plataforma é constante ao longo de não apenas uma ou duas execuções do programa, mas também da vida útil do seu hardware.
Se estas constantes - incluindo alguns como π e e que são constantes fundamentais do universo, e não vai variar ao longo do toda a eternidade - se eles podem estar em letras minúsculas, bem ... assim pode outras constantes. Você pode escolher.
Lembre-se, o PEP8 é um guia de estilo. Uma diretriz, não uma lei. Uma diretriz frequentemente violada mesmo pela biblioteca padrão do Python. E citando outra diretriz básica do Python, PEP20 (também conhecida como "O Zen do Python"):
- Bonito é melhor que feio
- A legibilidade conta
- A praticidade supera a pureza.
Em uma nota prática, quando um programa começa YELLY_CONSTANT
e SHOUTY_PARAMETER
começa a ralar, ajuda a lembrar que as constantes all-caps geralmente não são realmente ideais platônicos duradouros , mas parâmetros de um programa executado. Não há nada verdadeiramente constante sobre PORT
, SITENAME
ou NUMRUNS
, e eles não têm de ser geridos como globais programa independente. Por exemplo, eles podem ser inseridos em um dicionário como um pacote globalmente acessível de parâmetros de programa:
config = {
'port': 80,
'sitename': "Bubba's Blog",
'numruns': 100,
}
O Python também possui um bom recurso de passagem de parâmetros de palavras-chave que reduz a necessidade de usar APPARENTLY_ANGRY_GLOBAL_VARIABLES
:
def process_data(sitename, port=80, numruns=100):
...
process_data("Bubba's Blog")
Na prática, muitos desses valores serão (ou deveriam ser) lidos em arquivos de configuração, variáveis de ambiente do SO, argumentos de linha de comando ou outras fontes para satisfazer a inversão do princípio / padrão de controle . Mas essa é uma história maior para outro dia.