Вступление
В Python модуль - это автономный файл с операторами и определениями
Python. Например, file.py
можно рассматривать как модуль с именем
file
. Это отличается от пакета тем, что пакет представляет собой
набор модулей в каталогах, которые определяют структуру и иерархию
модулей.
Модули помогают нам разбивать большие программы на небольшие файлы, которыми легче управлять. С модулями возможность повторного использования кода становится реальностью. Предположим, у нас есть функция, которая часто используется в разных программах. Мы можем определить эту функцию в модуле, а затем импортировать ее в различные программы без необходимости каждый раз копировать ее код.
В этой статье мы увидим, как создавать модули Python и как использовать их в коде Python.
Написание модулей
Модуль - это просто файл Python с расширением .py
Имя файла становится
именем модуля. Внутри файла у нас могут быть определения и реализации
классов, переменных или функций. Затем их можно использовать в других
программах Python.
Давайте начнем с создания функции, которая просто печатает «Hello
World». Для этого создайте новый файл Python и сохраните его как
hello.py
. Добавьте в файл следующий код:
def my_function():
print("Hello World")
Если вы запустите приведенный выше код, он ничего не вернет. Это потому,
что мы ничего не сказали программе. Это правда, что мы создали
my_function()
, но мы не вызывали и не вызывали эту функцию. При
вызове эта функция должна напечатать текст «Hello World».
Теперь перейдите в тот же каталог, в котором вы сохранили указанный выше
файл, и создайте новый файл с именем main.py
Добавьте в файл следующий
код:
import hello
hello.my_function()
Выход
Hello World
Функция была успешно вызвана. Мы начали с импорта модуля. Имя файла -
hello.py
, следовательно, имя импортированного модуля - hello
.
Также обратите внимание на синтаксис, который мы использовали для вызова функции. Это называется «точечной нотацией», которая позволяет нам вызывать функцию, сначала указывая имя модуля, а затем имя функции.
Однако это всего лишь один из способов импорта модуля и вызова функции. Мы могли сделать это следующим образом:
from hello import my_function
my_function()
Выход
Hello World
В приведенном выше примере первая строка дает команду интерпретатору
Python импортировать функцию с именем my_function
из модуля с именем
hello
. В таком случае вам не нужно использовать точечную нотацию для
доступа к функции, вы можете просто вызвать ее напрямую.
Однако в случае, когда наш hello
имеет несколько функций, оператор
from hello import my_function
не будет импортировать все функции
hello
в нашу программу, только my_function
. Если вы попытаетесь
получить доступ к любой другой функции, будет сгенерирована ошибка. Вы
должны импортировать весь модуль или импортировать каждую отдельную
функцию, чтобы использовать их.
Мы можем определить переменную в модуле, которая затем может
использоваться другими модулями. Чтобы продемонстрировать это, откройте
файл hello.py
и добавьте в него следующий код:
def my_function():
print("Hello World")
# The variable that'll be used in other modules
name = "Nicholas"
Теперь откройте main.py
и измените его следующим образом:
import hello
hello.my_function()
print(hello.name)
Выход
Hello World
Nicholas
Мы успешно вызвали и функцию, и переменную, определенные в модуле,
поскольку мы импортировали весь модуль, а не только функцию
my_function()
Ранее мы заявляли, что можем определить класс в модуле. Давайте
посмотрим, как это сделать в следующем примере. Откройте hello.py
и
измените его следующим образом:
def my_function():
print("Hello World")
# Defining our variable
name = "Nicholas"
# Defining a class
class Student:
def __init__(self, name, course):
self.course = course
self.name = name
def get_student_details(self):
print("Your name is " + self.name + ".")
print("You are studying " + self.course)
Здесь мы определили класс с именем Student
. В этом классе определены
две переменные: name
и course
. В get_student_details()
, который
выводит сведения о студенте на консоль.
Теперь откройте файл main.py
и измените его следующим образом:
import hello
hello.my_function()
print(hello.name)
nicholas = hello.Student("Nicholas", "Computer Science")
nicholas.get_student_details()
Выход
Hello World
Nicholas
Your name is Nicholas.
You are studying Computer Science
В приведенном выше сценарии мы снова использовали точечную нотацию для
создания объекта класса student
из модуля hello
Затем мы
использовали get_student_details()
чтобы получить сведения о студенте.
Хотя модули в основном состоят из определений классов (в большинстве
случаев), они также могут запускать свой собственный код при импорте.
Чтобы продемонстрировать это, давайте hello.py
файл hello.py, где у
нас есть определение функции my_function()
вместе с вызовом функции:
def my_function():
print("Hello World")
my_function()
Теперь откройте файл main.py
и удалите все строки, кроме следующих:
import hello
Выход
Hello World
Приведенный выше вывод показывает, что мы определили и вызвали функцию в модуле. Когда модуль импортируется, он напрямую возвращает результат из функции без необходимости вызывать функцию. Такое поведение не всегда желательно, но оно полезно для определенных случаев использования, таких как предварительная загрузка данных из кеша при импорте модуля.
Импорт всех объектов модуля
Чтобы импортировать все объекты (функции, переменные, классы и т. Д.) Из
модуля, мы можем использовать оператор import *
Например, чтобы
импортировать все объекты, содержащиеся в hello
, мы можем
использовать следующий оператор:
from hello import *
После добавления вышеуказанного оператора в программу мы сможем
использовать любую функцию, переменную или класс, содержащиеся в hello
без необходимости добавлять к нему префикс hello
.
Доступ к модулю с другого пути
В Python модули используются более чем в одном проекте. Следовательно, нет смысла хранить свои модули в каталоге одного из проектов, поскольку другие проекты не смогут использовать его так же легко.
У вас есть несколько вариантов, когда вам нужно получить доступ к модулю, который не хранится в том же каталоге, что и ваша программа. Давайте обсудим это в следующих нескольких разделах:
Добавление путей
Чтобы импортировать модуль из другого пути, вам сначала нужно
импортировать sys
а также любые другие модули Python, которые вы
хотели бы использовать в своей программе.
Модуль sys
предоставляется стандартной библиотекой Python и
предоставляет функции и параметры, зависящие от системы. path.append()
из sys
можно использовать для добавления пути к модулю в текущий
проект.
Чтобы продемонстрировать это, hello.py
файл hello.py из каталога, в
котором находится файл main.py
Вставьте его в другой каталог. В моем
случае я вставил его в каталог «F: \ Python».
Теперь откройте файл main.py
, импортируйте sys
и укажите путь, по
которому интерпретатор Python будет искать файлы. Это показано ниже:
import sys
sys.path.append('F:/Python/')
import hello
Выход
Hello World
В приведенном выше сценарии строка sys.path.append('F:/Python/')
сообщает интерпретатору Python включить этот путь в список путей, по
которым будет производиться поиск при импорте модулей.
Добавление модуля в путь Python
Вышеупомянутый метод работает, только если вы импортируете модуль sys
Если вы не импортируете sys
и не укажете путь к модулю, будет
сгенерирована ошибка. Чтобы сделать модуль доступным для всей системы,
вы можете добавить его в путь, по которому Python обычно проверяет
наличие модулей и пакетов. Таким образом, вам не нужно будет
импортировать sys
и указывать путь к модулю, как мы сделали в
предыдущем разделе.
Прежде чем делать что-либо еще, вы должны сначала определить путь, по
которому Python ищет модули и пакеты. Просто откройте командную строку
своей операционной системы и запустите команду python
. Это приведет
вас к терминалу Python.
Импортируйте sys
следующим образом:
import sys
Затем вы можете запустить следующую команду, чтобы распечатать путь:
print(sys.path)
Вывод будет содержать как минимум один системный путь. Если вы сделаете это из среды программирования, вы получите несколько путей. В моем случае получилось следующее:
$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/Library/Python/2.7/site-packages/six-1.10.0-py2.7.egg', '/Library/Python/2.7/site-packages/cffi-1.2.1-py2.7-macosx-10.9-intel.egg', '/Library/Python/2.7/site-packages/pycparser-2.14-py2.7.egg', '/Library/Python/2.7/site-packages/virtualenv-13.1.2-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/Library/Python/2.7/site-packages']
>>>
Ваша цель должна заключаться в том, чтобы найти тот, который вы используете в настоящее время. Вы должны искать что-то вроде следующего:
/Library/Python/2.7/site-packages
Переместите свой hello.py
по пути. После этого вы сможете
импортировать hello
из любого каталога обычным способом, как показано
ниже:
import hello
Выход
Hello World
Заключение
Это знаменует конец данной статьи. Модуль - это просто файл Python с набором переменных и определений функций. Модуль облегчает повторное использование кода, поскольку вы можете определить функцию в модуле и вызывать ее из разных программ вместо того, чтобы определять функцию в каждой программе. Хотя модуль в основном используется для определений функций и классов, он также может экспортировать переменные и экземпляры классов.