• ru
  • Language: en
  • Documentation version: latest

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

В 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.

Note

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

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. Это заметно усложняет понимание кода.