Модуль позволяет логически организованный код на Python. Группировка связанного кода в модуль делает код проще для понимания и использования. Модуль представляет собой объект Python с произвольно названными атрибутами, которые могут связать и ссылка.
Проще говоря, модуль представляет собой файл, состоящий из кода Python. Модуль может определить функции, классы и переменные. Модуль может также включать в себя работоспособный код.
Код Python для модуля с именем aname обычно находится в файле namedaname.py. Вот пример простого модуля, support.py:
def print_func( par ): print "Hello : ", par return
Вы можете использовать любой исходный файл Python как модуль, выполнив оператор import: в исходном файле Python. import имеет следующий синтаксис:
import module1[, module2[,... moduleN]
Когда интерпретатор встречает оператор import, он импортирует модуль, если модуль присутствует в пути поиска. Путь поиска представляет собой список каталогов, в которых интерпретатор ищет, прежде чем импортировать модуль. Например, чтобы импортировать модуль hello.py, необходимо поместить следующую команду в верхней части сценария:
#!/usr/bin/python3 # Поддержка импорта модуля import support # Теперь можно вызвать определенную функцию этого модуля следующим образом support.print_func("AndreyEx")
Когда этот код выполниться, он произведет следующий результат:
Hello : AndreyEx
Модуль загружается только один раз, независимо от того, сколько раз он импортируется. Это предотвращает выполнение модуля несколько раз, если происходит несколько импортов.
Python из личных данных позволяет импортировать определенные атрибуты из модуля в текущее пространство имен. from … import имеет следующий синтаксис:
from modname import name1[, name2[, ... nameN]]
Например, чтобы импортировать функцию Fibonacci из модуля fib, используйте следующее заявление:
#!/usr/bin/python3 # Модуль числа Фибоначчи def fib(n): # возврат серии Фибоначчи до 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 в текущее пространство имен; он просто вводит пункт Фибоначчи модуля fib в глобальную таблицу символов модуля импорта.
Кроме того, можно импортировать все имена из модуля в текущее пространство имен, используя следующий оператор импорта:
from modname import *
Это обеспечивает легкий способ импортировать все элементы из модуля в текущее пространство имен; Однако, это утверждение следует использовать с осторожностью.
Внутри модуля, имя модуля (в виде строки) доступно в качестве значения глобальной переменной __name__. Код в модуле будет выполняться так же, как если вы импортировали его, но с __name__ установлен в положение «__main__».
Добавьте этот код в конце вашего модуля:
#!/usr/bin/python3 # Модуль числа Фибоначчи def fib(n): # возврат серии Фибоначчи до 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 для модуля в следующей последовательности:
Модуль поиска пути хранится в модуле системы SYS в переменной sys.path. Переменная sys.path содержит текущий каталог, PYTHONPATH, и установки в зависимости от значения по умолчанию.
PYTHONPATH это переменная окружения, состоящее из списка каталогов. Синтаксис PYTHONPATH такой же, как и у переменной оболочки PATH.
Вот типичный PYTHONPATH из системы Windows:
set PYTHONPATH = c:\python34\lib;
А вот типичный PYTHONPATH из системы UNIX:
set PYTHONPATH = /usr/local/lib/python
Переменные имена (идентификаторы), которые ссылаются на объекты. namespace является словарем имен переменных (ключи) и их соответствующих объектов (ценности).
Например, мы определяем переменную Money в глобальном пространстве имен. В функции Money, мы относим значение Money, поэтому Python принимает Money в качестве локальной переменной.
Тем не менее, мы получили доступ к значению локальных переменных Money перед его установкой, так что результат UnboundLocalError. Раскомментированное глобальное заявление устраняет проблему.
#!/usr/bin/python3 Money = 2000 def AddMoney(): # Раскомментируйте следующую строку, чтобы исправить код: # global Money Money = Money + 1 print (Money) AddMoney() print (Money)
Встроенная функция dir() возвращает отсортированный список строк, содержащих имена, определенные в модуле.
Список содержит имена всех модули, переменных и функций, определенные в модуле. Ниже приведен простой пример:
#!/usr/bin/python3 # Импорт встроенного модуля 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() могут быть использованы для возвращения имен в глобальных и локальных пространствах имен в зависимости от места, откуда они называются.
Возвращаемый тип обеих функций словарь. Таким образом, имена могут быть извлечены с помощью функции keys().
Когда модуль импортируется в сценарий, код на участке модуля верхнего уровня выполняется только один раз.
Поэтому, если вы хотите повторно выполнить код верхнего уровня в модуле, вы можете использовать функцию reload(). Функция reload() импортирует ранее импортированный модуль снова. Синтаксис функции reload() следующий:
reload(module_name)
Здесь module_name это имя модуля, который вы хотите перезагрузить, а не строка, содержащая имя модуля. Например, чтобы перезагрузить модуль hello, выполните следующие действия:
reload(hello)
Пакет представляет собой иерархическую структуру каталогов с файлами, который определяет единую среду приложений на языке Python, который состоит из модулей и подпакетов и с подразделами подпакетов, и так далее.
Рассмотрим файл Pots.py доступный в каталоге phone. Этот файл имеет следующую строку исходного кода:
#!/usr/bin/python3 def Pots(): print ("У меня есть телефон")
Похоже, у нас есть два других файла, имеющие различные функции с тем же именем, что и выше. Это:
Теперь создайте еще один файл __init__.py в каталог phone:
Для того, чтобы все ваши функции были доступны, когда вы импортировали phone, вам нужно будет поставить явные операторы импорта в __init__.py следующим образом:
from Pots import Pots from Isdn import Isdn from G3 import G3
После добавления этих строк в __init__.py, у вас будут все эти классы доступные при импорте пакета phone.
#!/usr/bin/python3 # Теперь импортируйте пакет Phone. import Phone Phone.Pots() Phone.Isdn() Phone.G3()
Когда этот код выполниться, он произведет следующий результат:
I'm Pots Phone I'm 3G Phone I'm ISDN Phone
В приведенном выше примере, мы взяли пример из одной функции в каждом файле, но вы можете сохранить несколько функций в файлах. Вы также можете определить различные классы Python в этих файлах, а затем вы можете создавать свои пакеты из этих классов.