Это будет последний урок в серии обновлений Python . Конечно, я не могу завершить эту серию, пока не перейду к следующему уровню в программировании, то есть к работе с модулями , которые считаются фундаментальными при обработке нетривиальных задач программирования.
Нетривиальные задачи программирования в большинстве случаев означают длинные программы с множеством строк кода. Модули пригодятся, когда они пытаются разбить такие сложные программы на управляемые куски и позволяют повторно использовать код. Таким образом, вы также сможете использовать код в любое время, импортировав этот модуль. Вы также можете решить проблему копирования некоторой функции много раз в разных программах, управляя ею с помощью модулей.
Давайте перейдем к сути учебника и посмотрим, как мы можем работать с модулями в Python.
Модули в Python
Когда вы создавали программы на Python, вы помещали их в исходный файл, заканчивающийся на .py
. Модули в Python просто создаются таким образом. То есть это исходные файлы, заканчивающиеся на .py
и расположенные в каталоге, где Python может их найти (т. Е. Текущем рабочем каталоге или указанном в sys.path ).
Модули обычно содержат операторы, которые связаны друг с другом. Как уже упоминалось выше, мы можем использовать модули в любое время. Использование модуля означает использование кода (то есть переменных, функций), хранящихся в этом модуле. Процесс создания и использования такого кода называется импортом .
Создание модулей
Создать модуль на Python очень просто. Допустим, мы хотели создать модуль, который бы печатал чье-то имя. Введите следующий код, используя ваш любимый редактор, и сохраните его как myname.py
. Это будет имя вашего модуля, исключая часть .py
, которая будет назначена глобальной переменной __name__
.
1
2
|
def print_name(n):
print ‘Hi’, n
|
Импорт модулей
Если у вас есть другой файл Python, в котором вы заинтересованы использовать код из модуля, определенного выше, мы импортируем модуль с помощью ключевого слова import
следующим образом:
1
2
|
import myname
name.print_name(‘Abder’)
|
Выход этого сценария будет: Hi Abder
.
Убедитесь, что Python может найти импортированный файл. Например, поместите его в тот же каталог, что и файл Python, где вы использовали import
.
Как видите, импорт модуля позволяет нам улучшить нашу программу, добавив в нее новые функциональные возможности из внешних файлов (то есть модулей).
Но что здесь происходит за кулисами? Когда вы import
модуль, Python компилирует этот модуль и генерирует файл .pyc
, и программа перекомпилируется, только если файл .py
новее, чем файл .pyc
.
Давайте рассмотрим другой пример, но на этот раз со встроенным модулем Python. Давайте выберем математический модуль. В этом примере для числа, которое мы передаем, мы хотим найти потолок (наименьшее целочисленное значение, большее или равное числу), пол (наибольшее целочисленное значение, меньшее или равное числу) и абсолютное значение этого числа , Сценарий Python для этой программы выглядит следующим образом:
1
2
3
4
5
|
import math
x = 4.7
print ‘The ceiling of ‘ + str(x) + ‘ is: ‘ + str(math.ceil(x))
print ‘The floor of ‘ + str(x) + ‘ is: ‘ + str(math.floor(x))
print ‘The absolute value of ‘ + str(x) + ‘ is: ‘ + str(math.fabs(x))
|
Если вы запустите этот скрипт, вывод должен выглядеть следующим образом:
1
2
3
|
The ceiling of 4.7 is: 5.0
The floor of 4.7 is: 4.0
The absolute value of 4.7 is: 4.7
|
Таким образом, мы смогли применить различные операции к нашему номеру без написания кода для каждой операции, а путем повторного использования уже доступных функций в math
модуле. Это очень помогает, не так ли?
Вам может быть интересно, должны ли мы всегда использовать math.function()
? Разве мы не можем использовать функцию сразу, не предшествуя ей с именем модуля (то есть math
)? Да, вы можете сделать это, используя следующий синтаксис для import
:
from math import *
Таким образом, вы можете вызывать предыдущие функции ( ceil(x)
, floor(x)
и fabs(x)
) без необходимости ставить перед ними имя модуля math
.
Модули как скрипты
Давайте вернемся к нашему простому модулю myname.py
:
1
2
|
def print_name(n):
print ‘Hi’, n
|
Можем ли мы рассматривать этот модуль как отдельный (основной) скрипт, который мы можем напрямую запускать и передавать аргументы из командной строки? Например, что произойдет, если вы введете следующее в командной строке?
python myname.py 'Abder'
Ничего! Попробуйте — вы не получите никакого вывода.
Чтобы иметь возможность запускать модуль как скрипт, мы должны установить __name__ = '__main__
‘. Итак, модуль myname
теперь будет выглядеть следующим образом:
1
2
3
4
5
6
|
def print_name(n):
print ‘Hi’, n
if __name__ == ‘__main__’:
import sys
print_name(sys.argv[1])
|
Если вы запустите эту команду в своем терминале: python myname.py 'Abder'
, вы должны получить следующий вывод:
Hi Abder
пакеты
Важной концепцией, которая идет рука об руку с модулями, является концепция пакетов . Пакет представляет собой набор модулей. Другими словами, в то время как модуль является файлом, пакет является каталогом / папкой. Это способ, которым мы структурируем модули, используя точечные имена модулей. Так что если вы видите оператор import
который выглядит так:
import university.department
Это означает, что у нас есть модуль, названный department
в university
пакете.
Как мы видим, использование модулей позволяет разбить сложную программу на управляемые куски, упростить отслеживание любых ошибок в программе, лучше понять ее функциональные возможности и обеспечить возможность повторного использования.
На этом мы заканчиваем серию обновлений Python . В этой серии мы изучили основы и необходимые концепции, которые нужно понять, чтобы двигаться дальше в языке программирования Python. Мы изучили понятия списков , словарей и кортежей . Мы также узнали, как принимать решения через условия ( ссылка на условия Python ) и повторять через циклы ( ссылка на циклы Python ). Мы также узнали, как работать с функциями , создавать классы и создавать их экземпляры ( т.е. объекты), а также упаковывать нашу работу в модули.