Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Путь поиска оператора import. Всё является объектом




Путь поиска оператора import

Перед тем, как идти дальше, я хочу вкратце рассказать о путях поиска библиотек. Когда вы пытаетесь импортировать модуль (с помощью оператора import), Python ищет его в нескольких местах. В частности, он ищет во всех директориях, перечисленных в sys. path. Это просто список, который можно легко просматривать и изменять при помощи стандартных списочных методов. (Вы узнаете больше о списках в главе Встроенные типы данных. )

> > > import sys ①
> > > sys. path ②
['',
'/usr/lib/python31. zip',
'/usr/lib/python3. 1',
'/usr/lib/python3. 1/plat-linux2@EXTRAMACHDEPPATH@',
'/usr/lib/python3. 1/lib-dynload',
'/usr/lib/python3. 1/dist-packages',
'/usr/local/lib/python3. 1/dist-packages']
> > > sys ③
< module 'sys' (built-in)>
> > > sys. path. insert(0, '/home/mark/diveintopython3/examples') ④
> > > sys. path ⑤
['/home/mark/diveintopython3/examples',
'',
'/usr/lib/python31. zip',
'/usr/lib/python3. 1',
'/usr/lib/python3. 1/plat-linux2@EXTRAMACHDEPPATH@',
'/usr/lib/python3. 1/lib-dynload',
'/usr/lib/python3. 1/dist-packages',
'/usr/local/lib/python3. 1/dist-packages']

Импортирование модуля sys делает доступными все его функции и атрибуты.
sys. path — список имён директорий, определяющий текущий путь поиска. (Ваш будет выглядеть иначе, в зависимости от вашей операционной системы, от используемой версии Python и от того, куда он был установлен. ) Python будет искать в этих директориях (в заданном порядке) файл с расширением «. py», имя которого совпадает с тем, что вы пытаетесь импортировать.
Вообще-то я вас обманул; истинное положение дел немного сложнее, потому что не все модули лежат в файлах с расширением «. py». Некоторые из них, как, например, модуль sys, являются встроенными; они впаяны в сам Python. Встроенные модули ведут себя точно так же, как обычные, но их исходный код недоступен, потому что они не были написаны на Python! (Модуль sys написан на Си. )
Можно добавить новую директорию в путь поиска, добавив имя директории в список sys. path, во время выполнения Python, и тогда Python будет просматривать её наравне с остальными, как только вы попытаетесь импортировать модуль. Новый путь поиска будет действителен в течение всего сеанса работы Python.
Выполнив команду sys. path. insert(0, новый_путь), вы вставили новую директорию на первое место в список sys. path, и, следовательно, в начало пути поиска модулей. Почти всегда, именно это вам и нужно. В случае конфликта имён (например, если Python поставляется со 2-й версией некоторой библиотеки, а вы хотите использовать версию 3) этот приём гарантирует, что будут найдены и использованы ваши модули, а не те, которые идут в комплекте с Python.

Всё является объектом

Если вы вдруг пропустили, я только что сказал, что функции в Python имеют атрибуты, и эти атрибуты доступны во время выполнения. Функция, как и всё остальное в Python, является объектом.

Запустите интерактивную оболочку Python и повторяйте за мной:

> > > import humansize ①
> > > print(humansize. approximate_size(4096, True)) ②
4. 0 KiB
> > > print(humansize. approximate_size. __doc__) ③
Преобразует размер файла в удобочитаемую для человека форму.

Ключевые аргументы:
size -- размер файла в байтах
a_kilobyte_is_1024_bytes -- если True (по умолчанию), используются степени 1024
если False, используются степени 1000

Возвращает: текстовую строку (string)

Первая строчка импортирует программу humansize в качестве модуля — фрагмента кода, который можно использовать интерактивно или из другой Python-программы. После того, как модуль был импортирован, можно обращаться ко всем его публичным функциям, классам и атрибутам. Импорт применяется как в модулях, для доступа к функциональности других модулей, так и в интерактивной оболочке Python. Это очень важная идея, и вы ещё не раз встретите её на страницах этой книги.
Когда вы хотите использовать функцию, определённую в импортированном модуле, нужно дописать к её имени название модуля. То есть вы не можете использовать просто approximate_size, обязательно humansize. approximate_size. Если вы использовали классы в Java, то для вас это должно быть знакомо.
Вместо того, чтобы вызвать функцию (как вы, возможно, ожидали), вы запросили один из её атрибутов — __doc__.

 

Оператор import в Python похож на require из Perl. После import в Python, вы обращаетесь к функциям модуля как модуль. функция; после require в Perl, для обращения к функциям модуля используется имя модуль:: функция.
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...