Модуль в Python — как работает и примеры
В этом уроке вы узнаете, что такое модуль Python, и поймете, как он работает.
Что такое модуль Python?
Модуль в Python — это файл, содержащий код Python. Фактически все в Python является объектом, включая модуль.
Когда вы импортируете модуль с помощью оператора import, Python создает новый объект модуля. Например, следующий код импортирует встроенный математический модуль:
import math
Python создает новую переменную с именем math, которая ссылается на объект модуля:
import math print(math)
Math — это переменная, которая ссылается на объект модуля:
<module 'math'(built-in)>
Имя модуля — math. Тип математического модуля — модуль класса:
<class 'module'>
Если вы посмотрите на globals(), вы увидите переменную math в глобальном пространстве имен:
import math from pprint import pprint pprint(globals())
Выход:
{'__annotations__': {}, '__builtins__': <module 'builtins'(built-in)>, '__doc__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__', '__package__': None, '__spec__': None, 'math': <module 'math'(built-in)>, 'pprint': <function pprint at 0x0000023FE66491F0>}
Поскольку math — это объект, вы можете получить доступ к его атрибутам. Например, вы можете получить имя математического объекта, используя атрибут __name__:
import math print(math.__name__)
Выход:
math
И вы можете получить доступ ко всем атрибутам объекта math через __dict__:
import math from pprint import pprint pprint(math.__dict__)
Выход:
'__doc__': 'This module provides access to the mathematical functions\n' 'defined by the C standard.', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': 'math', '__package__': '', '__spec__': ModuleSpec(name='math', loader=<class '_frozen_importlib.BuiltinImporter'>, origin='built-in'), 'acos': <built-in function acos>, ...
И вы можете использовать math как обычную переменную. Например, вы можете установить значение None:
math = None
Это указывает Python уничтожить объект модуля, на который ссылается математическая переменная math.
math является экземпляром ModuleType:
import math from types import ModuleType pprint(isinstance(math,ModuleType))
Выход:
True
Математический модуль math является встроенным модулем. Давайте рассмотрим невстроенный модуль.
Невстроенный модуль
Модуль abc позволяет определять абстрактные базовые классы. Это не встроенный модуль:
import abc print(abc)
Выход:
<module 'abc' from 'C:\\Python\\lib\\abc.py'>
Модуль abc определен в файле lib\abc.py в папке установки Python в отличие от математического модуля, который является встроенным модулем.
Тип abc также является модулем:
import abc print(type(abc))
Выход:
<class 'module'>
Как и математический модуль, abc является экземпляром ModuleType, как показано в следующем примере:
import abc from types import ModuleType pprint(isinstance(abc,ModuleType))
Выход:
True