Книга: PyNEng
Назад: 11. Модули
Дальше: Создание своих модулей

Импорт модуля

Импорт модуля

В Python есть несколько способов импорта модуля:

  • import module
  • import module as
  • from module import object
  • from module import *

import module

Вариант import module:

In [1]: dir() Out[1]:  ['In',  'Out',  ...  'exit',  'get_ipython',  'quit']  In [2]: import os  In [3]: dir() Out[3]:  ['In',  'Out',  ...  'exit',  'get_ipython',  'os',  'quit'] 

После импорта модуль os появился в выводе dir(). Это значит, что он теперь в текущем именном пространстве.

Чтобы вызвать какую-то функцию или метод из модуля os, надо указать os. и затем имя объекта:

In [4]: os.getlogin() Out[4]: 'natasha' 

Этот способ импорта хорош тем, что объекты модуля не попадают в именное пространство текущей программы. То есть, если создать функцию с именем getlogin(), она не будет конфликтовать с аналогичной функцией модуля os.

Если в имени файла содержится точка, стандартный способ импортирования не будет работать. Для таких случаев используется .

import module as

Конструкция import module as позволяет импортировать модуль под другим именем (как правило, более коротким):

In [1]: import subprocess as sp  In [2]: sp.check_output('ping -c 2 -n  8.8.8.8', shell=True) Out[2]: 'PING 8.8.8.8 (8.8.8.8): 56 data bytes\n64 bytes from 8.8.8.8: icmp_seq=0 ttl=48 time=49.880 ms\n64 bytes from 8.8.8.8: icmp_seq=1 ttl=48 time=46.875 ms\n\n--- 8.8.8.8 ping statistics ---\n2 packets transmitted, 2 packets received, 0.0% packet loss\nround-trip min/avg/max/stddev = 46.875/48.377/49.880/1.503 ms\n' 

from module import object

Вариант from module import object удобно использовать, когда из всего модуля нужны только одна-две функции:

In [1]: from os import getlogin, getcwd 

Теперь эти функции доступны в текущем именном пространстве:

In [2]: dir() Out[2]:  ['In',  'Out',  ...  'exit',  'get_ipython',  'getcwd',  'getlogin',  'quit'] 

Их можно вызывать без имени модуля:

In [3]: getlogin() Out[3]: 'natasha'  In [4]: getcwd() Out[4]: '/Users/natasha/Desktop/Py_net_eng/code_test' 

from module import *

Вариант from module import * импортирует все имена модуля в текущее именное пространство:

In [1]: from os import *  In [2]: dir() Out[2]:  ['EX_CANTCREAT',  'EX_CONFIG',  ...  'wait',  'wait3',  'wait4',  'waitpid',  'walk',  'write']  In [3]: len(dir()) Out[3]: 218 

В модуле os очень много объектов, поэтому вывод сокращен. В конце указана длина списка имен текущего именного пространства.

Такой вариант импорта лучше не использовать. При таком импорте по коду непонятно, что какая-то функция взята, например, из модуля os. Это заметно усложняет понимание кода.

Назад: 11. Модули
Дальше: Создание своих модулей