Модуль позволяет вам логически организовать ваш код Python. Группировка связанного кода в модуль облегчает понимание и использование кода. Модуль — это объект Python с произвольно названными атрибутами, которые вы можете связать и сослаться на них.
Просто модуль — это файл, состоящий из кода Python. Модуль может определять функции, классы и переменные. Модуль также может включать исполняемый код.
пример
Код Python для модуля с именем aname обычно находится в файле с именем aname.py. Вот пример простого модуля support.py —
def print_func( par ): print "Hello : ", par return
Заявление об импорте
Вы можете использовать любой исходный файл Python в качестве модуля, выполнив инструкцию import в другом исходном файле Python. Импорт имеет следующий синтаксис —
import module1[, module2[,... moduleN]
Когда интерпретатор встречает оператор импорта, он импортирует модуль, если модуль присутствует в пути поиска. Путь поиска — это список каталогов, которые интерпретатор ищет перед импортом модуля. Например, чтобы импортировать модуль hello.py, вам нужно поместить следующую команду вверху скрипта:
#!/usr/bin/python3 # 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, используйте следующий оператор —
#!/usr/bin/python3 # Fibonacci numbers module def fib(n): # return Fibonacci series up to n result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a + b return result >>> from fib import fib >>> fib(100) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
Этот оператор не импортирует весь модуль fib в текущее пространство имен; он просто вводит элемент fibonacci из модуля fib в глобальную таблицу символов импортирующего модуля.
Заявление от … import *
Также возможно импортировать все имена из модуля в текущее пространство имен, используя следующую инструкцию импорта —
from modname import *
Это обеспечивает простой способ импортировать все элементы из модуля в текущее пространство имен; Однако это утверждение следует использовать с осторожностью.
Выполнение модулей как скриптов
Внутри модуля имя модуля (в виде строки) доступно в качестве значения глобальной переменной __name__. Код в модуле будет выполнен, как если бы вы его импортировали, но с __name__, установленным в «__main__».
Добавьте этот код в конце вашего модуля —
#!/usr/bin/python3 # Fibonacci numbers module def fib(n): # return Fibonacci series up to n result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a + b return result if __name__ == "__main__": f = fib(100) print(f)
Когда вы запустите вышеуказанный код, будет отображен следующий вывод.
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
Расположение модулей
Когда вы импортируете модуль, интерпретатор Python ищет модуль в следующих последовательностях:
-
Текущий каталог.
-
Если модуль не найден, Python ищет каждый каталог в переменной оболочки PYTHONPATH.
-
Если ничего не помогает, Python проверяет путь по умолчанию. В UNIX этот путь по умолчанию обычно / usr / local / lib / python3 /.
Текущий каталог.
Если модуль не найден, Python ищет каждый каталог в переменной оболочки PYTHONPATH.
Если ничего не помогает, Python проверяет путь по умолчанию. В UNIX этот путь по умолчанию обычно / usr / local / lib / python3 /.
Путь поиска модуля хранится в системном модуле sys как переменная sys.path . Переменная sys.path содержит текущий каталог, PYTHONPATH и зависящее от установки значение по умолчанию.
Переменная PYTHONPATH
PYTHONPATH — это переменная окружения, состоящая из списка каталогов. Синтаксис PYTHONPATH такой же, как и у переменной оболочки PATH.
Вот типичный PYTHONPATH из системы Windows —
set PYTHONPATH = c:\python34\lib;
А вот типичный PYTHONPATH из системы UNIX —
set PYTHONPATH = /usr/local/lib/python
Пространства имен и область видимости
Переменные — это имена (идентификаторы), которые отображаются на объекты. Пространство имен — это словарь имен переменных (ключей) и соответствующих им объектов (значений).
-
Оператор Python может обращаться к переменным в локальном пространстве имен и в глобальном пространстве имен . Если локальная и глобальная переменные имеют одно и то же имя, локальная переменная затеняет глобальную переменную.
-
Каждая функция имеет свое локальное пространство имен. Методы класса следуют тому же правилу видимости, что и обычные функции.
-
Python делает обоснованные предположения о том, являются ли переменные локальными или глобальными. Предполагается, что любая переменная, которой присвоено значение в функции, является локальной.
-
Следовательно, чтобы присвоить значение глобальной переменной внутри функции, сначала необходимо использовать глобальный оператор.
- Оператор global VarName сообщает Python, что VarName является глобальной переменной. Python прекращает поиск переменной в локальном пространстве имен.
Оператор Python может обращаться к переменным в локальном пространстве имен и в глобальном пространстве имен . Если локальная и глобальная переменные имеют одно и то же имя, локальная переменная затеняет глобальную переменную.
Каждая функция имеет свое локальное пространство имен. Методы класса следуют тому же правилу видимости, что и обычные функции.
Python делает обоснованные предположения о том, являются ли переменные локальными или глобальными. Предполагается, что любая переменная, которой присвоено значение в функции, является локальной.
Следовательно, чтобы присвоить значение глобальной переменной внутри функции, сначала необходимо использовать глобальный оператор.
Например, мы определяем переменную Money в глобальном пространстве имен. Внутри функции Money мы присваиваем Money значение, поэтому Python принимает Money в качестве локальной переменной.
Однако перед установкой мы получили доступ к значению локальной переменной Money , поэтому результатом является UnboundLocalError. Раскомментирование глобального утверждения устраняет проблему.
#!/usr/bin/python3 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/python3 # 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 () вызывается из функции, он возвращает все имена, к которым можно получить глобальный доступ из этой функции.
Если locals () вызывается из функции, он возвращает все имена, к которым можно получить локальный доступ из этой функции.
Если globals () вызывается из функции, он возвращает все имена, к которым можно получить глобальный доступ из этой функции.
Тип возврата обеих этих функций — словарь. Поэтому имена могут быть извлечены с помощью функции keys () .
Функция reload ()
Когда модуль импортируется в скрипт, код в части модуля верхнего уровня выполняется только один раз.
Поэтому, если вы хотите повторно выполнить код верхнего уровня в модуле, вы можете использовать функцию reload () . Функция reload () снова импортирует ранее импортированный модуль. Синтаксис функции reload () такой:
reload(module_name)
Здесь имя_модуля — это имя модуля, который вы хотите перезагрузить, а не строка, содержащая имя модуля. Например, чтобы перезагрузить модуль hello, сделайте следующее:
reload(hello)
Пакеты в Python
Пакет представляет собой иерархическую структуру файловых каталогов, которая определяет единую прикладную среду Python, которая состоит из модулей, подпакетов, подпакетов и т. Д.
Рассмотрим файл Pots.py, доступный в телефонном справочнике. Этот файл имеет следующую строку исходного кода —
#!/usr/bin/python3 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/python3 # 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 в этих файлах, а затем вы можете создавать свои пакеты из этих классов.