Создание и импорт модулей в Python

Введение В Python модуль - это автономный файл с операторами и определениями Python. Например, file.py можно рассматривать как модуль с именем file. Это отличается от пакета тем, что пакет представляет собой набор модулей в каталогах, которые определяют структуру и иерархию модулей. Модули помогают нам разбивать большие программы на небольшие файлы, которыми легче управлять. С модулями возможность повторного использования кода становится реальностью. Предположим, у нас есть функция, которая часто используется в разных пр.

Вступление

В 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 с набором переменных и определений функций. Модуль облегчает повторное использование кода, поскольку вы можете определить функцию в модуле и вызывать ее из разных программ вместо того, чтобы определять функцию в каждой программе. Хотя модуль в основном используется для определений функций и классов, он также может экспортировать переменные и экземпляры классов.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus