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