Использование глобальных данных (переменных, констант и меток) в Python - PullRequest
0 голосов
/ 11 декабря 2018

С моей точки зрения, существует три типа глобальных данных:

  1. Глобальные переменные
    • Код сам может изменять их
    • Пользователь может изменять их
  2. Глобальные константы
    • Сам код не должен их изменять
    • Пользователь может изменять их
  3. Глобальные метки
    • Сам код не должен их изменять
    • Пользователь не должен их изменять

(Я не уверен в терминологии, приведенной выше, поэтому, пожалуйста, не стесняйтесь ее исправлять.) Я разработал краткий фиктивный пример кода с несколькими примерами переменных, констант и меток, чтобы продемонстрировать, что я имею в виду:

"""
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] Лучшей читаемости кода можно также просто достичь с помощью комментариев в коде

На данный момент я не уверен, следует ли мне использовать их в моем коде или нет.

...