Python - модули
Модуль позволяет вам логически организовать ваш код Python. Группирование связанного кода в модуль упрощает понимание и использование кода. Модуль - это объект Python с произвольно названными атрибутами, которые можно связывать и ссылаться.
Проще говоря, модуль - это файл, состоящий из кода Python. Модуль может определять функции, классы и переменные. Модуль также может включать исполняемый код.
пример
Код Python для модуля с именем aname обычно находится в файле с именем aname.py . Вот пример простого модуля support.py
def print_func( par ):
print "Hello : ", par
return
Импорт Заявление
Вы можете использовать любой исходный файл Python в качестве модуля, выполнив оператор импорта в другом исходном файле 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 modname import name1[, name2[, ... nameN]]
Например, чтобы импортировать функцию fibonacci из модуля fib, используйте следующий оператор -
from fib import fibonacci
Этот оператор не импортирует весь модуль fib в текущее пространство имен; он просто вводит элемент fibonacci из модуля fib в глобальную таблицу символов импортирующего модуля.
От ... импорт * Заявление
Также можно импортировать все имена из модуля в текущее пространство имен, используя следующий оператор импорта -
from modname import *
Это обеспечивает простой способ импортировать все элементы из модуля в текущее пространство имен; однако это утверждение следует использовать с осторожностью.
Расположение модулей
Когда вы импортируете модуль, интерпретатор Python ищет модуль в следующих последовательностях:
Текущий каталог.
Если модуль не найден, Python ищет каждый каталог в переменной оболочки PYTHONPATH.
Если ничего не помогает, Python проверяет путь по умолчанию. В UNIX этот путь по умолчанию обычно / usr / local / lib / python /.
Путь поиска модуля хранится в системном модуле sys как sys.pathпеременная. Переменная sys.path содержит текущий каталог PYTHONPATH и значение по умолчанию, зависящее от установки.
PYTHONPATH Variable
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(module_name)
Здесь имя_модуля - это имя модуля, который вы хотите перезагрузить, а не строка, содержащая имя модуля. Например, чтобы перезагрузить модуль приветствия , выполните следующие действия:
reload(hello)
Пакеты на Python
Пакет - это иерархическая структура каталогов файлов, которая определяет единую среду приложения Python, состоящую из модулей, подпакетов, подпакетов и т. Д.
Рассмотрим файл Pots.py, доступный в каталоге телефона . Этот файл имеет следующую строку исходного кода -
#!/usr/bin/python
def Pots():
print "I'm Pots Phone"
Аналогичным образом у нас есть еще два файла с разными функциями с тем же именем, что и выше -
Файл Phone / Isdn.py с функцией Isdn ()
Файл Phone / G3.py с функцией G3 ()
Теперь создайте еще один файл __init__.py в каталоге телефона -
- Phone/__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 в этих файлах, а затем создавать свои пакеты из этих классов.