Перед тем, как идти дальше, я хочу вкратце рассказать о путях поиска библиотек. Когда вы пытаетесь импортировать модуль (с помощью оператора import), Python ищет его в нескольких местах. В частности, он ищет во всех директориях, перечисленных в sys. path. Это просто список, который можно легко просматривать и изменять при помощи стандартных списочных методов. (Вы узнаете больше о списках в главе Встроенные типы данных. )
Импортирование модуля 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, для обращения к функциям модуля используется имя модуль:: функция.