Норма спільноти PEP8 та Python повинна використовуватись ALL_CAPS_CONSTANTS
. Це звичайна візуальна підказка, яка десятиліттями використовується в C, Java, Perl, PHP, Python, bash та інших мовах програмування та оболонках. Але в сучасному інтернет-мовленні ВСЕ КАПАЦІЙНІ ЗНАЧЕННЯ ЗНАЧЕННЯ . А кричати - грубо.
Однак, Python досить непослідовний ALL_CAPS_CONSTANTS
. JavaScript може бути Math.PI
, але Python є math.pi
. Немає більш впізнаваної або стійкої постійної, ніж π. Або врахуйте sys.version_info
, яку версію Python ви працюєте. 100% постійним в протягом життя вашої програми - набагато більше , ніж PORT
або MAX_ITERATIONS
або інші константи , які б визначити. Або як щодо sys.maxsize
? Максимальне ціле ціле значення вашої платформи є постійним не лише для однієї чи двох запусків програми, але і для життя вашого обладнання.
Якщо ці константи - включаючи такі, як π і e, які є основними константами Всесвіту, і не змінюватимуться протягом усієї вічності, - якщо вони можуть бути малі, а ... і інші константи. Ви можете вибрати.
Пам'ятайте, PEP8 - це посібник зі стилів. Настанова, а не закон. Настанови часто суперечать навіть стандартній бібліотеці Python. І посилаючись на іншу основну інструкцію Python, PEP20 (він же "Дзен Пітона"):
- Красиве краще, ніж потворне
- Читання рахується
- Практичність перемагає чистоту.
На практичній ноті, коли програма YELLY_CONSTANT
і SHOUTY_PARAMETER
починає грати, це допомагає пам’ятати, що константи з усіма великими кришками, як правило, насправді не витримують платонічних ідеалів , а параметри програми. Немає нічого істинно постійного в тому PORT
, SITENAME
або NUMRUNS
, і їм не потрібно керувати як окремі глобальні програми. Наприклад, вони можуть бути скинуті до словника як глобально доступний пакет програмних параметрів:
config = {
'port': 80,
'sitename': "Bubba's Blog",
'numruns': 100,
}
У Python також є функція проходження тонких параметрів ключового слова, яка зменшує потребу у використанні APPARENTLY_ANGRY_GLOBAL_VARIABLES
:
def process_data(sitename, port=80, numruns=100):
...
process_data("Bubba's Blog")
На практиці багато з цих значень будуть (або повинні бути) прочитані з конфігураційних файлів, змінних середовища середовища ОС, аргументів командного рядка чи інших джерел, щоб задовольнити інверсію принципу / шаблону управління. Але це більша історія для іншого дня.