С моей точки зрения, существует три типа глобальных данных:
- Глобальные переменные
- Код сам может изменять их
- Пользователь может изменять их
- Глобальные константы
- Сам код не должен их изменять
- Пользователь может изменять их
- Глобальные метки
- Сам код не должен их изменять
- Пользователь не должен их изменять
(Я не уверен в терминологии, приведенной выше, поэтому, пожалуйста, не стесняйтесь ее исправлять.) Я разработал краткий фиктивный пример кода с несколькими примерами переменных, констант и меток, чтобы продемонстрировать, что я имею в виду:
"""
Paper area calculator script
"""
import requests
# variables
REQUEST_COUNT = int()
# constants
URL = {
'login': 'https://booksonline.com/login',
'book': 'https://booksonline.com/?book={book}',
}
USERNAME = 'foo'
PASSWORD = '123456'
# labels
PAPER_SIZES = {
'A4': [210, 297],
'A5': [148, 210],
}
def calculate_area(book: str, size: str = 'A4') -> int:
with requests.Session() as s:
s.post(
URL['login'],
data={'username': USERNAME, 'password': PASSWORD},
)
res = s.get(URL['book'].format(book=book))
global REQUEST_COUNT
REQUEST_COUNT += 2
page_count = res.json()['PageCount']
area = PAPER_SIZES[size][0] * PAPER_SIZES[size][1] * int(page_count)
return area
Существует четкое различие между глобальными переменными и константами (код должен изменять количество запросов, но не ваш пароль) и между глобальными константами и метками (пользователь должен изменить свой пароль, но не бумажные измерения).Я уже узнал, что чрезмерное использование глобальных переменных не считается хорошей практикой , хотя обычно рекомендуется использовать глобальные константы.Но я не нашел никакой информации о понятии, которое я называю метки - глобальные данные, которые близки к константам, но которые никогда нельзя изменять.Такие вещи, как PI
(3.14), ZIP_HEADER
(504B), LOCALHOST
(127.0.0.1) и т. Д. Считается ли их использование хорошей практикой?
Преимущества и недостаткииспользуя глобальные метки с моей точки зрения:
- [A] Меньшее присутствие Магических чисел в коде
- [A] Лучшая общая читаемость кода
- [A] Меньшая вероятность опечатки при многократном использовании сложных меток
- [D] Пользователь может быть смущен, является ли он константой или меткой (может ли он изменять ее или нет)
- [D] Лучшей читаемости кода можно также просто достичь с помощью комментариев в коде
На данный момент я не уверен, следует ли мне использовать их в моем коде или нет.