Модули Python

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

Помимо этого, писать повторяющиеся строки кода в целой программе очень затратно. Для разрешения этой проблемы, были созданы модули, пакеты и библиотеки. Модули содержат функции и классы, которые используются для решения конкретных задач. Например, модуль math содержит математические функции, random позволяет работать со случайными числами (точнее, псевдослучайные, но это уже детали, ненужные новичку).

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

Импорт библиотеки

Независимо от того, библиотека стандартная или сторонняя, ее необходимо импортировать. Это позволит интерпретатору «узнать» о том, что существуют дополнительные классы и функции и воспользоваться ими. 

Чтобы импортировать библиотеку, используется команда import()

>>> import math

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

>>> math

<module 'math' (built-in)>

Эта строка говорит о том, что в приложении появился объект класса module, который называется math

Мы можем узнать, какие функции входят в конкретный модуль. Для этого существует специальная функция dir(), вызвав которую, мы можем это сделать.  

>>> dir(math)

['__doc__', '__loader__', '__name__', 

'__package__', '__spec__', 'acos', 'acosh',

'asin', 'asinh', 'atan', 'atan2', 'atanh', 

'ceil', 'copysign', 'cos', 'cosh',

'degrees', 'e', 'erf', 'erfc', 'exp', 

'expm1', 'fabs', 'factorial', 'floor',

'fmod', 'frexp', 'fsum', 'gamma', 'gcd',

 'hypot', 'inf', 'isclose', 'isfinite',

'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 

'log10', 'log1p', 'log2', 'modf',

'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 

'sqrt', 'tan', 'tanh', 'trunc']

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

Например, для вызова функции pow(), нужно написать следующую строку кода. 

>>> math.pow(2, 2)

4.0

Обратите внимание: это не та функция, которая вызывается непосредственно из консоли без точки. Это метод конкретного объекта, и он вызывается совсем другим способом. Python об этом знает. Следовательно, если вы попытаетесь вызвать обычную функцию pow(), то будет использоваться стандартная функция.

>>> pow(2, 2)

4

Если же необходимо вызвать константу, а не функцию, то тогда скобки не используются.  

>>> math.pi

3.141592653589793

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

>>> help(math.gcd)

Help on built-in function gcd in module math:




gcd(...)

    gcd(x, y) -> int

    greatest common divisor of x and y

Этот раздел интерактивный. Чтобы из него выйти, необходимо нажать в консоли клавишу q

В описанном выше примере сообщается, что функция позволяет получить целое число, которое является самым большим делителем для x и y. 

Если нужно, можно также воспользоваться официальной документацией на сайте http://python.org

Также можно импортировать лишь отдельные функции модуля. 

>>> from math import gcd, sqrt, hypot

Интерпретатор Python читает эту строку приблизительно так: импортировать функции gcd, sqrt и hypot из модуля math

Тогда не надо вводить имя модуля перед тем, как использовать функцию. Можно сразу их писать.  

>>> gcd(100, 150)

50

>>> sqrt(16)

4.0

>>> hypot(3, 4)

5.0

Также можно импортировать сразу все функции. 

>>> from math import *

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

>>> pi = 3.14

>>> from math import pi

>>> pi

3.141592653589793

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

А вот в случае заблаговременного импорта, все будет ровно наоборот.  

>>> from math import pi

>>> pi = 3.14

>>> pi

3.14

Учитывая это, опасно именно импортировать все функции. Ведь тогда очень просто не увидеть то, что значения идентификаторов заменяются. 

Правда, возможна замена имени идентификатора на то, которое хочется человеку.  

>>> from math import pi as P

>>> P

3.141592653589793

>>> pi

3.14

Здесь мы использовали ключевое слово as для того, чтобы задать имя, под которым будет импортироваться константа. Это полезно делать, когда появляется необходимость сократить имя. 

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

>>> import calendar

>>> calendar.weekheader(2)

'Mo Tu We Th Fr Sa Su'

Сравните этот код с таким. 

>>> from calendar import weekheader as week

>>> week(3)

'Mon Tue Wed Thu Fri Sat Sun'

В других случаях оптимально оставлять идентификаторы в пространстве имен модуля и получать доступ к ним через его имя. То естЬ, использовать стандартную команду import, а функции вызывать, как метод.

Как создать собственный модуль в Python?

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

from math import pi, pow

 

def rectangle(a, b):

    return round(a * b, 2)

 

def triangle(a, h):

    return round(0.5 * a * h, 2)

 

def circle(r):

    return round(pi * pow(r, 2), 2)

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

Для создания модуля код размещается в файле с расширением .py. Правда, куда разместить сам этот файл? Очень интересный вопрос. 

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

>>> import sys

>>> sys.path

['', '/usr/lib/python35.zip', 

'/usr/lib/python3.5', 

'/usr/lib/python3.5/plat-x86_64-linux-gnu',

'/usr/lib/python3.5/lib-dynload', 

'/home/pl/.local/lib/python3.5/site-packages',

'/usr/local/lib/python3.5/dist-packages', 

'/usr/lib/python3/dist-packages']

Этот фрагмент демонстрирует те каталоги, которые используются в Linux. Что касается Windows, то он будет другим. В качестве первого элемента выступает пустая строка. Она означает каталог, в котором сохранена программа, которая импортирует модуль. То есть, если сохранить модуль и программу в одной папке, то у интерпретатора не возникнет проблемы с тем, чтобы его найти. 

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

Помимо этого, возможно добавление собственного каталога в sys.path. Правда, надо, чтобы или программа изменяла значение, или в самой операционной системе редактировать файл конфигурации. 

Этого делать не рекомендуется.

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

Внимание! При импорте файла модуля его расширение не указывается.

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

Затем запросить аргументы в зависимости от того, что он выбрал. Далее они передаются в функцию из модуля square, а результат потом просто выводится на экран компьютера.

Выводы

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

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

Желаем вам больших успехов в работе с модулями. Расширяемость – это одно из главных преимуществ языка. Разработано большое количество сторонних библиотек, которые можно скачать в интернете и сильно упростить себе жизнь. 

ОфисГуру
Adblock
detector