Новости

05.02.2021

Книга «Секреты Python Pro»

Книга «Секреты Python Pro» научит проектировать ПО и писать качественный код, то есть делать его понятным, сопровождаемым и расширяемым.

Дейн Хиллард — профессиональный питонист, — с помощью примеров и упражнений он покажет вам как разбивать код на блоки, повышать качество за счет снижения сложности и т. д. Только освоив основополагающие принципы, вы сможете сделать так, чтобы чтение, сопровождение и переиспользование вашего кода не доставляло проблем ни вам ни вашим коллегам.

Разделение ответственности


В этой главе:

  • Использование средств Python для организации и разделения кода.
  • Выбор способа и времени разделения кода на четко различимые фрагменты.
  • Уровни гранулярности в разделении кода.


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

Определение

Зоной ответственности (concern) я называю совокупность правил отдельной области знаний, с которой имеет дело ПО. Эти правила могут варьироваться по сложности от вычисления квадратного корня до управления платежами в системе электронной коммерции.

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

Примечание


Если вы еще не установили Python на своем компьютере, то сделайте это, чтобы отслеживать код из книги (рекомендации по установке — в приложении в конце книги). Я подожду вас здесь. Получить полный исходный код примеров и упражнений можно в репозитории книги на GitHub (https://github.com/daneah/practices-of-the-python-pro).

2.1. Организация пространства имён


Как и многие языки программирования, Python разделяет фрагменты кода с помощью пространств имен. При выполнении программы он отслеживает все известные пространства имен и информацию, доступную в них.

Пространства имен полезны в нескольких отношениях:

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


Пространства имен настолько важны, что они включены в «Дзен языка Python» в качестве последнего утверждения (если вы не знакомы с Дзеном, то попробуйте запустить интерпретатор Python и набрать import this).

Пространства имен — отличная штука! Будем делать их больше!
                                                                    Дзен языка Python

Имена всех переменных, функций и классов, которые вы когда-либо использовали в Python, находились в том или ином пространстве имен. Имена, такие как x, total или EssentialBusinessDomainObject, являются ссылками на что-то. x = 3 означает «назначить значение 3 имени x», то есть можно в дальнешем ссылаться на x. Так называемая «переменная» — это имя, которое ссылается на значение, хотя в Python имена могут ссылаться на функции, классы и др.

2.1.1. Пространства имен и инструкция import


Когда вы впервые открываете интерпретатор Python, встроенное пространство имен заполняется встроенной начинкой, например функциями без префикса, такими как print() и open(), которые можно сразу использовать в любом месте кода. Вот почему в Python знаменитая легкая инструкция print('Здравствуй, мир!') стала мемом Just Works (просто работает).

В отличие от других языков, в Python не нужно явно создавать пространства имен, но ваша структура кода повлияет на то, какие пространства имен создаются и как они будут взаимодействовать. Так, при создании модуля для него автоматически будет создано отдельное пространство имен. В самом простом случае модулем является файл .py, содержащий некоторый код. Файл с именем sales_tax.py, например, является модулем sales_tax:

Каждый модуль имеет глобальное пространство имен, к которому код в модуле может свободно обращаться. Ни во что не вложенные функции, классы и переменные находятся в глобальном пространстве имен модуля:

Функции и классы в модуле также имеют локальное пространство имен, обращаться к которому могут только они:

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

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

  • Это имя находится во встроенном в Python пространстве имен.
  • Имя находится в глобальном пространстве имен текущего модуля.
  • Имя находится в текущей кодовой строке локального пространства имен.


Приоритет для конфликтующих имен работает в обратном порядке: локальное имя будет переопределять глобальное имя, которое будет переопределять встроенное имя. Запомните, что наиболее специфичным для текущего кода является определение, которое используется сейчас (рис. 2.1).

Возможно, вы встречали ошибку NameError: name 'my_var' is not defined1. Она означает, что имя my_var не найдено ни в одном из пространств имен, известных коду. То есть, скорее всего, вы ни разу не передавали переменной my_var значение либо передали его где-то еще и должны его импортировать.

Модули представляют собой отличный способ начать дробить код. Если у вас есть один длинный файл script.py с кучей несвязанных функций в нем, попробуйте разбить эти функции на модули.

С полным содержанием статьи можно ознакомиться на сайте "Хабрахабр":

https://habr.com/ru/company/piter/blog/540346/


Комментарии: 0

Пока нет комментариев


Оставить комментарий






Все поля обязательны к заполнению.

Перед публикацией комментарии проходят модерацию.