Модули загружаются и запускаются при выполнении первого оператора
В качестве одного последствия, из-за того, что код верхнего уровня в файле модуля обычно выполняется только один раз, вы можете применять его для инициализации переменных. Взгляните на содержимое файла simple.ру:
В приведенном примере операторы print и = выполняются, когда модуль импортируется в первый раз, и переменная spam инициализируется во время импортирования:
Вторая и последующие операции импортирования не выполняют код модуля повторно; они всего лишь извлекают уже созданный объект модуля из внутренней таблицы модулей Python. Таким образом, переменная spam не будет инициализироваться заново:
Если вы действительно хотите, чтобы код модуля выполнился повторно при последующей операции импортирования, это делается с помощью функции
import
или from
и только первого. Так было задумано — поскольку импортирование является затратной операцией, по умолчанию Python делает его только один раз на файл и однократно на процесс. Более поздние операции импортирования просто извлекают объект уже загруженного модуля.В качестве одного последствия, из-за того, что код верхнего уровня в файле модуля обычно выполняется только один раз, вы можете применять его для инициализации переменных. Взгляните на содержимое файла simple.ру:
print('hello')
spam = 1
В приведенном примере операторы print и = выполняются, когда модуль импортируется в первый раз, и переменная spam инициализируется во время импортирования:
# main.py
import simple # Первая операция импортирования: загружает и выполняет код файла
simple.spam = 2
Вторая и последующие операции импортирования не выполняют код модуля повторно; они всего лишь извлекают уже созданный объект модуля из внутренней таблицы модулей Python. Таким образом, переменная spam не будет инициализироваться заново:
import simple
print(simple.spam) # 2
Если вы действительно хотите, чтобы код модуля выполнился повторно при последующей операции импортирования, это делается с помощью функции
reload
.Оператор
from … *
может использоваться только на верхнем уровне файла модуля, но не внутри функции. Его присутствие там делает невозможным статическое обнаружение переменных. Вот почему в некоторых источниках рекомендуется импортировать все необходимое в начале файла.Куда в файле.py можно поместить оператор import?
Anonymous Quiz
17%
В блок try / except
4%
Внутри проверки if … else
10%
Внутри функции (после оператора def)
69%
Во все вышеперечисленные места
Подобно
def
, операторы import
и from
являются исполняемыми, а не объявляемый на стадии компиляции. Они могут вкладываться внутри проверок if
для выбора среди нескольких вариантов, находиться внутри оператора def
функции, чтобы загружать только по вызову, использоваться в блоках try
для обеспечения стандартных значений. Они не распознаются и не запускаются до тех пор, пока Python не встретит их во время выполнения программы.Что из нижеперечисленного верно про pandas.Series?
Anonymous Quiz
18%
Каждому значению соответствует метка-идентификатор
5%
Отсчет идентификаторов начинается со случайного int
39%
Series — двухмерная структура данных (индекс + значения)
38%
Все вышеперечисленное
Что означает точка в строках импорта выше?
Anonymous Quiz
16%
Путь, включая вышестоящие папки
38%
Обращение к определенному объекту модуля
38%
Варианты 1 и 2
8%
Ничего из вышеперечисленного
Синтаксис путей с точками был выбран отчасти для обеспечения нейтральности к платформе, но еще и потому, что пути в операторах
import
становятся реальными цепочками вложенных объектов. Такой синтаксис также означает, вы можете получать странные сообщения об ошибках, если забудете опустить .ру в своих операторах import
. Скажем, оператор import mod.ру
предположительно является операцией импортирования пути к каталогу — он загружает mod.py, затем пытается загрузить mod\py .ру и в конечном итоге выдает потенциальносбивающее с толку сообщение об ошибке “No module named ру
” (“Модуль по имени ру отсутствует”). Начиная с версии Python 3.3, сообщение об ошибке было улучшено и выглядит как “No module named ‘mod.py’; mod is not a package
” (“Модуль по имени mod.py отсутствует; mod не является пакетом”).Зачем нужен файл __init__.py? #размяться
Anonymous Quiz
6%
Это позволяет работать как с Python 2.X, так и 3.X
9%
Он содержит байт-код
75%
Он делает папку пакетом модулей
9%
Он содержит кэш проекта
Файл __init__.py в Python используется для обозначения директории как пакета. Это означает, что директория (папка) может содержать модули (файлы .py), и Python сможет импортировать их как часть этого пакета.
Что делает ведущая точка в коде?
Anonymous Quiz
12%
Импортирует из всех модулей, заканчивающихся на spam
19%
Позволяет импортировать из объекта spam текущего файле
57%
Сужает область импорта до текущей папки
11%
Код вызовет ошибку
Выражение означает «импортировать переменную eggs из модуля по имени spam, который расположен в том же самом пакете, что и файл, содержащий этот оператор».
Чем первое выражение отличается от второго?
Anonymous Quiz
80%
Дополнительная ведущая точка выполняет импортирование, начиная с родительского каталога
7%
.. позволяет импортировать откуда угодно в проекте
6%
.. позволяет импортировать атрибуты классов
7%
Ничем не отличается
Точка (.) в операции относительного импортирования обозначает каталог пакета, содержащий файл, в котором находится оператор импортирования. Дополнительная ведущая точка выполняет относительное импортирование, начиная с родительского каталога текущего каталога пакета.