[ Сборник задач ]
Тема 12.
Импорт. Модули и пакеты

[ Сборник задач ]
Тема 12. Импорт. Модули и пакеты

Python Workbook Cover T1
  • Операторы: import
  • Контент: Вопросы (6шт) + задачи (1шт)

Оглавление

1
Введение
Рассмотрим модули и пакеты в Python. Научимся их импортировать разными способами. Создадим собственные модули и используем в своем коде.
Перейти
2
Вопросы и ответы
6 вопросов по теме "Импорт. Модули и пакеты" + ответы
Перейти
3
Условия задач
Одно большое задание по теме базового уровня
Перейти
4
Решения задач
Приводим код решения задания
Перейти
1
One

Введение

Чтобы не хранить вереницу кода в одном файле, его удобно разбивать по отдельным документам. В результате такого действия разработчик структурирует свой проект и делит его на модули и пакеты. Чтобы получить к ним доступ в конкретном файле скрипта требуется провести импортирование с помощью команды import. Это не единственный, но чаще всего используемый способ. Библиотеки можно легко переносить по своим проектам, их проще править и рефакторить.

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

Читайте также

2
Two

Вопросы по теме "Импорт. Модули и пакеты"

3
Three

Задание по теме "Импорт. Модули и пакеты"

Задача
Создайте пакет figures, состоящий из трех подпакетов: triangle, circle, square.

В каждом подпакете будем иметь файл code.py, где создадим ряд функций:

– для пакета circle: функции circle_perimeter() – вычисляет длину окружности, circle_area() – вычисляет площадь окружности. Еще заведем переменную default_radius = 5, которая будет скрыта при импорте модуля. Ее назначение – дефолтный радиус для окружности, если пользователь не введет свой. Обе функции принимают на вход только радиус.

– для пакета triangle: функции triangle_perimeter() – вычисляет периметр треугольника, triangle_area() – вычисляет площадь фигуры. Дополнительно создадим три переменные (длины сторон треугольника): a = 7, b = 2, c = 8, которые также не будут видны при импорте. На вход функциям передается длина трех сторон (если пользователь ничего не введет, то используются значения по умолчанию).

– для пакета square: функции square_perimeter() – вычисляет периметр квадрата, square_area() – вычисляет площадь фигуры. Дополнительная переменная a = 15 не доступна при импорте и принимается функциями, если пользователь не предоставил свои размеры стороны квадрата.

Ваша итоговая задача – позволить человеку, загрузившему ваш пакет, иметь возможность напрямую импортировать все функции из подпакетов. Например, он может написать так: from figure import circle_area.

Также вы, как разработчик, после написания всей библиотеки решили поменять ее имя на figures. Постарайтесь сделать код таким, чтобы это не заставило вас переписывать все внутренние импорты с учетом нового именования.
4
Two

Решение

Задача. Базовый уровень

Условие

Создайте пакет 'figures', состоящий из трех подпакетов: 'triangle', 'circle', 'square'.

В каждом подпакете будем иметь файл code.py, где создадим ряд функций:

– для пакета 'circle': функции circle_perimeter() – вычисляет длину окружности, circle_area() – вычисляет площадь окружности. 
Еще заведем переменную default_radius = 5, которая будет скрыта при импорте модуля. 
Ее назначение – дефолтный радиус для окружности, если пользователь не введет свой. 
Обе функции принимают на вход только радиус.

– для пакета 'triangle': функции triangle_perimeter() – вычисляет периметр треугольника, triangle_area() – вычисляет площадь фигуры. 
Дополнительно создадим три переменные (длины сторон треугольника): a = 7, b = 2, c = 8, которые также не будут видны при импорте. 
На вход функциям передается длина трех сторон (если пользователь ничего не введет, то используются значения по умолчанию).

– для пакета 'square': функции square_perimeter() – вычисляет периметр квадрата, square_area() – вычисляет площадь фигуры. 
Дополнительная переменная a = 15 не доступна при импорте и принимается функциями, если пользователь не предоставил свои размеры стороны квадрата.

Ваша итоговая задача – позволить человеку, загрузившему ваш пакет, иметь возможность напрямую импортировать все функции из подпакетов. 
Например, он может написать так: 'from figure import circle_area'.

Также вы, как разработчик, после написания всей библиотеки решили поменять ее имя на 'figures'. 
Постарайтесь сделать код таким, чтобы это не заставило вас переписывать все внутренние импорты с учетом нового именования.
Для решения задания понадобится использовать относительные импорты. Представленный подход – пример реализации удобного API. Причем это удобство получают обе стороны: вы, как разработчик (легко можно расширять библиотеку без полного переписывания импортов), а также пользователи, которым не нужно разбираться в дебрях библиотеки и осуществлять сумасшедшие импорты (типа from figures.circle.code import circle_area).

Ниже продемонстрирована файловая структура проекта:
Файловая структура

figures
  |_ circle
	|_ __init__.py
	|_ code.py
  |_ square
	|_ __init__.py
	|_ code.py
  |_ triangle
	|_ __init__.py
	|_ code.py
  |_ __init__.py
Содержимое каждого документа можно посмотреть/скачать на GitHub. Для примера посмотрим на код корневого файла пакета __init__.py, а также скриптов из подпакета circle.
Пример - IDE

from .circle import circle_area, circle_perimeter
from .triangle import triangle_area, triangle_perimeter
from .square import square_area, square_perimeter

__all__ = (
    'circle_area',
    'circle_perimeter',
    'square_area',
    'square_perimeter',
    'triangle_area',
    'triangle_perimeter'
)

Пример – IDE (файл «__init__.py» из пакета «circle»)

from .code import circle_area, circle_perimeter

Пример – IDE (файл «code.py» из пакета «circle»)

from math import pi
 
default_radius = 5
 
 
def circle_perimeter(radius=default_radius):
	return pi * 2 * radius
 
 
def circle_area(radius=default_radius):
	return pi * radius ** 2
Теперь данную библиотеку может скачать любой пользователь и без проблем импортировать ее в свой проект, получив легкий и удобный доступ к 6-ти созданным нами функциям.
Как вам материал?

Читайте также