Пропустить до содержимого

Как использовать constants.py в Python

CodeMDD.io

Python Константы: Улучшения поддерживаемости вашего кода

Понимание констант и переменных

  • Что такое переменные
  • Что такое константы
  • Почему использовать константы
  • Когда использовать константы

В программировании термин “константа” относится к именам, представляющим значения, которые не изменяются во время выполнения программы. Константы являются основным понятием в программировании, и разработчики Python используют их во многих случаях. Однако в Python нет отдельного синтаксиса для определения констант. На практике константы в Python - это просто переменные, которые никогда не изменяются.

Чтобы предотвратить программистов от переназначения имени, которое должно содержать константу, сообщество Python приняло конвенцию: использовать заглавные буквы. Для каждого Pythonista важно знать, что такое константы, а также почему и когда их использовать.

В этом учебнике вы узнаете, как:

  • Правильно определить константы в Python
  • Определить некоторые встроенные константы
  • Использовать константы для улучшения читабельности, повторяемости и поддерживаемости вашего кода
  • Применять различные подходы к организации и управлению константами в проекте
  • Использовать несколько техник, чтобы сделать константы строго неизменными в Python

Изучая определение и использование констант, вы значительно улучшите читаемость, поддерживаемость и повторяемость вашего кода.

Чтобы максимально эффективно использовать этот учебник, вам потребуется базовые знания о переменных в Python, функциях, модулях, пакетах и пространствах имен. Вам также нужно знать основы объектно-ориентированного программирования в Python.

Понимание констант и переменных

Переменные и константы - это два исторических и фундаментальных понятия в компьютерном программировании. Большинство языков программирования используют эти концепции для манипулирования данными и работы эффективным и логическим образом.

Переменные и константы, вероятно, будут присутствовать в каждом проекте, приложении, библиотеке или другом коде, который вы когда-либо будете писать.

SyntaxDescription
VariableConstant
Чаще обновляется в процессе выполнения программыНикогда не изменяется в ходе выполнения программы
Может быть присвоено новое значение в любой точке программыНе может быть присвоено новое значение после инициализации
Используется для хранения изменяющихся данныхИспользуется для хранения неизменных данных
Имена переменных регистрозависимыеИмена констант обычно в верхнем регистре

В Python можно использовать переменные и константы для хранения значений и работы с ними в коде. Но, обозначив константу в качестве переменной, это указывает на то, что следует избегать изменения значения этой переменной в процессе выполнения программы. Вам также следует обозначать константы, используя имена в верхнем регистре, чтобы обозначить их особое значение.

Определение своих собственных констант в Python

  • Пользовательские константы
  • Константы модуля Dunder-Level

В Python можно создавать собственные константы, присваивая им значения в коде. Вот два подхода к определению пользовательских констант в Python:

1. Пользовательские константы: Это константы, определенные программистом, которые не изменяют свое значение во время выполнения программы.

PI = 3.14159
MAXIMUM_RETRIES = 5

2. Константы на уровне Dunder-модуля: Вы также можете определить константы в специальных переменных, начинающихся с двойного подчеркивания, в вашем модуле Python.

__author__ = 'John Doe'
__version__ = '1.0.0'

Используя эти два подхода, вы можете определить свои собственные константы в Python и использовать их в вашем коде.

Применение констант на практике

  • Замена магических чисел для читаемости
  • Повторное использование объектов для облегчения поддержки
  • Предоставление значений аргументов по умолчанию

Одним из основных преимуществ использования констант в коде является их использование для улучшения читаемости и поддержки. Вот несколько практических сценариев использования констант:

1. Замена магических чисел для читаемости: Вместо использования числовых значений в коде, вы можете определить константу с понятным именем и использовать ее вместо магических чисел.

SECONDS_PER_MINUTE = 60
minutes = 30
seconds = minutes * SECONDS_PER_MINUTE

2. Повторное использование объектов для облегчения поддерживаемости: Вместо создания нескольких одинаковых объектов вы можете определить константу и использовать ее повторно в разных частях кода.

DEFAULT_FONT = Font('Arial', 12)
label1 = Label('Hello', font=DEFAULT_FONT)
label2 = Label('World', font=DEFAULT_FONT)

3. Предоставление значений аргументов по умолчанию: Вместо использования литералов в качестве значений аргументов функции, вы можете определить константу и использовать ее в качестве значения по умолчанию.

def say_hello(name='Guest'):
print(f'Hello, {name}!')
say_hello() # "Hello, Guest!"
say_hello('John') # "Hello, John!"

Это некоторые из способов использования констант в практическом программировании. Вы можете применить эти методы и другие в своем коде, чтобы улучшить его поддерживаемость.

Обработка констант в реальном проекте

  • Объединение констант с соответствующим кодом
  • Создание отдельного модуля для констант
  • Хранение констант в файле конфигурации
  • Обработка констант как переменных окружения

В больших проектах обработка констант может оказаться сложной задачей. Вот несколько практик, которые вы можете использовать для обработки констант в реальном проекте:

1. Объединение констант с соответствующим кодом: Если константа является особо важной для определенной части кода, ее можно объединить вместе с соответствующим кодом.

def calculate_area(radius):
PI = 3.14159
return PI * radius ** 2

2. Создание отдельного модуля для констант: Вы можете создать отдельный модуль, посвященный только определению и содержанию всех констант вашего проекта.

constants.py
MAXIMUM_RETRIES = 5
DEFAULT_FONT = Font('Arial', 12)

3. Хранение констант в файле конфигурации: Если ваш проект имеет множество констант или некоторые константы зависят от среды выполнения, вы можете хранить их в файле конфигурации.

config.ini
[Constants]
MAXIMUM_RETRIES = 5
DEFAULT_FONT = Arial 12

4. Обработка констант как переменных окружения: Если ваш проект использует переменные окружения, вы можете хранить некоторые константы в виде переменных окружения вместо их жесткого задания в коде.

import os
MAXIMUM_RETRIES = int(os.environ.get('MAX_RETRIES', '5'))

Это некоторые из способов обработки констант в реальном проекте. Используя эти подходы или комбинируя их, вы можете эффективно управлять константами в вашем проекте.

Исследование других констант в Python

  • Встроенные константы
  • Внутренние имена Dunder
  • Полезные строковые и математические константы

В Python существует несколько предопределенных встроенных констант, с которыми вы можете работать в своем коде. Вот некоторые из них:

1. Численные константы:

  • True и False: Логические значения истина и ложь.
  • None: Представляет отсутствие значения.

2. Специальные значения:

  • NotImplemented: Показывает, что данная операция не реализована для данных типов.
  • Ellipsis: Обозначает, что код был сокращен и не показан полностью.

3. Встроенные функции:

  • abs(): Возвращает абсолютное значение числа.
  • max() и min(): Возвращают максимальное и минимальное значение из последовательности.
  • sum(): Возвращает сумму всех элементов последовательности.

4. Модуль математики: В модуле math есть несколько математических констант, таких как pi (число Пи) и e (число Эйлера).

В Python также существуют внутренние имена Dunder, которые являются константами. Они включают __name__, __file__, __doc__ и другие.

Вы также можете использовать полезные константы для работы со строками и математикой, такие как string.ascii_letters, string.digits, math.inf и math.nan.

Типизация констант

В Python 3.5 и выше вы можете использовать аннотации типов для аннотирования констант. Например:

PI: float = 3.14159
MAXIMUM_RETRIES: int = 5

Используя аннотации типов, вы можете явно указать тип вашей константы, что может быть полезно для документирования и статического анализа кода.

Определение строгих констант в Python

  • Aтрибут .slots
  • Декоратор @property
  • Фабричная функция namedtuple()
  • Декоратор @dataclass
  • Специальный метод .setattr()

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

1. Атрибут .slots: С помощью атрибута .slots вы можете определить список атрибутов экземпляра, которые разрешены для данного класса. Если вы определите только неизменяемые значения в .slots, объекты такого класса станут строго неизменными.

class Circle:
__slots__ = ('radius', 'area')
def __init__(self, radius):
self.radius = radius
self.area = 3.14159 * radius ** 2

2. Декоратор @property: Декоратор @property позволяет определить метод, который можно читать как обычное свойство объекта, но нельзя изменить. Это может быть использовано для создания констант на уровне класса.

class Circle:
@property
def pi(self):
return 3.14159
circle = Circle()
print(circle.pi) # 3.14159
circle.pi = 3.14 # Raises an AttributeError

3. Фабричная функция namedtuple(): Фабричная функция namedtuple() из модуля collections позволяет создавать именованные кортежи с неизменяемыми значениями. Это может быть использовано для определения строгой константы.

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
origin = Point(0, 0)
origin.x = 1 # Raises a TypeError

4. Декоратор @dataclass: Декоратор @dataclass из модуля dataclasses позволяет использовать аннотации типов для определения неизменяемых значений. Это может быть использовано для определения строгих констант.

from dataclasses import dataclass
@dataclass(frozen=True)
class Coordinate:
x: float
y: float
origin = Coordinate(0, 0)
origin.x = 1 # Raises a FrozenInstanceError

5. Специальный метод .setattr(): Специальный метод .setattr() позволяет программисту определить, какие атрибуты экземпляра могут быть установлены. Вы можете использовать этот метод для определения строгих констант.

class Circle:
def __setattr__(self, name, value):
if name == 'radius':
raise AttributeError("Can't set attribute")
else:
super().__setattr__(name, value)
circle = Circle()
circle.radius = 5 # Raises an AttributeError

Это некоторые методы, которые вы можете использовать для определения строгих констант в Python.

Заключение

В этом учебнике мы рассмотрели, что такое константы и переменные, а также почему и когда использовать константы. Мы изучили различные подходы к определению констант в Python и применение констант на практике для улучшения читаемости, повторяемости и поддерживаемости кода. Мы также рассмотрели способы организации и управления константами в проекте и обсудили другие полезные константы в Python. Наконец, мы рассмотрели некоторые методы для определения строгих констант в Python.

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