Модуль позволяет вам логически организовать ваш код Python. Группировка связанного кода в модуль облегчает понимание и использование кода. Модуль — это объект Python с произвольно названными атрибутами, которые вы можете связать и сослаться на них.
Просто модуль — это файл, состоящий из кода Python. Модуль может определять функции, классы и переменные. Модуль также может включать исполняемый код.
пример
Код Python для модуля с именем aname обычно находится в файле с именем aname.py . Вот пример простого модуля, support.py
def print_func( par ): print "Hello : ", par return
Заявление об импорте
Вы можете использовать любой исходный файл Python в качестве модуля, выполнив инструкцию import в другом исходном файле Python. Импорт имеет следующий синтаксис —
import module1[, module2[,... moduleN]
Когда интерпретатор встречает оператор импорта, он импортирует модуль, если модуль присутствует в пути поиска. Путь поиска — это список каталогов, которые интерпретатор ищет перед импортом модуля. Например, чтобы импортировать модуль support.py, вам нужно поместить следующую команду вверху скрипта:
#!/usr/bin/python # Import module support import support # Now you can call defined function that module as follows support.print_func("Zara")
Когда приведенный выше код выполняется, он дает следующий результат —
Hello : Zara
Модуль загружается только один раз, независимо от того, сколько раз он был импортирован. Это предотвращает многократное выполнение модуля, если происходит многократный импорт.
Заявление от … импорта
Оператор Python from позволяет импортировать определенные атрибуты из модуля в текущее пространство имен. Импорт from … имеет следующий синтаксис —
from modname import name1[, name2[, ... nameN]]
Например, чтобы импортировать функцию fibonacci из модуля fib, используйте следующий оператор —
from fib import fibonacci
Этот оператор не импортирует весь модуль fib в текущее пространство имен; он просто вводит элемент fibonacci из модуля fib в глобальную таблицу символов импортирующего модуля.
Заявление от … import *
Также возможно импортировать все имена из модуля в текущее пространство имен, используя следующую инструкцию импорта —
from modname import *
Это обеспечивает простой способ импортировать все элементы из модуля в текущее пространство имен; Однако это утверждение следует использовать с осторожностью.
Расположение модулей
Когда вы импортируете модуль, интерпретатор Python ищет модуль в следующих последовательностях:
-
Текущий каталог.
-
Если модуль не найден, Python ищет каждый каталог в переменной оболочки PYTHONPATH.
-
Если ничего не помогает, Python проверяет путь по умолчанию. В UNIX этот путь по умолчанию обычно / usr / local / lib / python /.
Текущий каталог.
Если модуль не найден, Python ищет каждый каталог в переменной оболочки PYTHONPATH.
Если ничего не помогает, Python проверяет путь по умолчанию. В UNIX этот путь по умолчанию обычно / usr / local / lib / python /.
Путь поиска модуля хранится в системном модуле sys как переменная sys.path . Переменная sys.path содержит текущий каталог, PYTHONPATH и зависящее от установки значение по умолчанию.
Переменная PYTHONPATH
PYTHONPATH — это переменная окружения, состоящая из списка каталогов. Синтаксис PYTHONPATH такой же, как и у переменной оболочки PATH.
Вот типичный PYTHONPATH из системы Windows —
set PYTHONPATH = c:\python20\lib;
А вот типичный PYTHONPATH из системы UNIX —
set PYTHONPATH = /usr/local/lib/python
Пространства имен и область видимости
Переменные — это имена (идентификаторы), которые отображаются на объекты. Пространство имен — это словарь имен переменных (ключей) и соответствующих им объектов (значений).
Оператор Python может обращаться к переменным в локальном пространстве имен и в глобальном пространстве имен . Если локальная и глобальная переменные имеют одно и то же имя, локальная переменная затеняет глобальную переменную.
Каждая функция имеет свое локальное пространство имен. Методы класса следуют тому же правилу видимости, что и обычные функции.
Python делает обоснованные предположения о том, являются ли переменные локальными или глобальными. Предполагается, что любая переменная, которой присвоено значение в функции, является локальной.
Следовательно, чтобы присвоить значение глобальной переменной внутри функции, сначала необходимо использовать глобальный оператор.
Оператор global VarName сообщает Python, что VarName является глобальной переменной. Python прекращает поиск переменной в локальном пространстве имен.
Например, мы определяем переменную Money в глобальном пространстве имен. Внутри функции Money мы присваиваем Money значение, поэтому Python принимает Money в качестве локальной переменной. Однако перед установкой мы получили доступ к значению локальной переменной Money , поэтому результатом является UnboundLocalError. Раскомментирование глобального утверждения устраняет проблему.
#!/usr/bin/python Money = 2000 def AddMoney(): # Uncomment the following line to fix the code: # global Money Money = Money + 1 print Money AddMoney() print Money
Функция dir ()
Встроенная функция dir () возвращает отсортированный список строк, содержащих имена, определенные модулем.
Список содержит имена всех модулей, переменных и функций, которые определены в модуле. Ниже приведен простой пример —
#!/usr/bin/python # Import built-in module math import math content = dir(math) print content
Когда приведенный выше код выполняется, он дает следующий результат —
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
Здесь специальная строковая переменная __name__ — это имя модуля, а __file__ — имя файла, из которого был загружен модуль.
Функции глобальных () и локальных () функций
Функции globals () и locals () можно использовать для возврата имен в глобальном и локальном пространствах имен в зависимости от места, откуда они вызываются.
Если locals () вызывается из функции, он возвращает все имена, к которым можно получить локальный доступ из этой функции.
Если globals () вызывается из функции, он возвращает все имена, к которым можно получить глобальный доступ из этой функции.
Тип возврата обеих этих функций — словарь. Поэтому имена могут быть извлечены с помощью функции keys ().
Функция reload ()
Когда модуль импортируется в скрипт, код в части модуля верхнего уровня выполняется только один раз.
Поэтому, если вы хотите повторно выполнить код верхнего уровня в модуле, вы можете использовать функцию reload () . Функция reload () снова импортирует ранее импортированный модуль. Синтаксис функции reload () такой:
reload(module_name)
Здесь имя_модуля — это имя модуля, который вы хотите перезагрузить, а не строка, содержащая имя модуля. Например, чтобы перезагрузить модуль hello , сделайте следующее:
reload(hello)
Пакеты в Python
Пакет представляет собой иерархическую структуру файловых каталогов, которая определяет единую прикладную среду Python, которая состоит из модулей, подпакетов, подпакетов и т. Д.
Рассмотрим файл Pots.py, доступный в телефонном справочнике. Этот файл имеет следующую строку исходного кода —
#!/usr/bin/python def Pots(): print "I'm Pots Phone"
Аналогичным образом, у нас есть еще два файла с разными функциями с тем же именем, что и выше —
-
Файл Phone / Isdn.py с функцией Isdn ()
-
Файл Phone / G3.py, имеющий функцию G3 ()
Файл Phone / Isdn.py с функцией Isdn ()
Файл Phone / G3.py, имеющий функцию G3 ()
Теперь создайте еще один файл __init__.py в телефонном справочнике —
- Телефон / __ init__.py
Чтобы сделать все ваши функции доступными при импорте Phone, вам нужно поместить явные операторы импорта в __init__.py следующим образом:
from Pots import Pots from Isdn import Isdn from G3 import G3
После добавления этих строк в __init__.py у вас есть все эти классы, доступные при импорте пакета Phone.
#!/usr/bin/python # Now import your Phone Package. import Phone Phone.Pots() Phone.Isdn() Phone.G3()
Когда приведенный выше код выполняется, он дает следующий результат —
I'm Pots Phone I'm 3G Phone I'm ISDN Phone
В приведенном выше примере мы взяли пример отдельных функций в каждом файле, но вы можете сохранить несколько функций в ваших файлах. Вы также можете определить различные классы Python в этих файлах, а затем вы можете создавать свои пакеты из этих классов.