#python
#python
Вопрос:
Я читаю некоторый код, который содержит следующий оператор импорта:
from threading import local as thread_local, Event, Thread
Сначала этот синтаксис озадачил меня, но я думаю, что он эквивалентен:
from threading import local as thread_local
from threading import Event
from threading import Thread
Кто-нибудь может подтвердить, так ли это?
Комментарии:
1. ДА. Иначе как вы могли бы определить более одного псевдонима при импорте?
from threading import local as t_local, Event as Harambe, Thread as Banana
.2. Да, я уверен! Я думаю, что все сообщество Python также будет позитивным!
Ответ №1:
Вы можете проверить это в официальной документации. Вот документация по import
синтаксису:
import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )* | "from" relative_module "import" identifier ["as" name] ( "," identifier ["as" name] )* | "from" relative_module "import" "(" identifier ["as" name] ( "," identifier ["as" name] )* [","] ")" | "from" module "import" "*" module ::= (identifier ".")* identifier relative_module ::= "."* module | "." name ::= identifier
Обратите внимание, что у вас всегда есть import module ["as" name]
и identifier ["as" name]
, в том числе в определении списка:
( "," identifier ["as" name] )*
Это означает, что за запятой ,
следует идентификатор, необязательно присваиваемый as
имени, и )*
означает, что «эта группа может повторяться ноль или более раз, включая приведенный вами пример.
Это также объясняется на той же странице чуть позже:
from
Форма использует немного более сложный процесс:
- найдите модуль, указанный в
from
предложении, загрузите и инициализируйте его, если необходимо;- для каждого из идентификаторов, указанных в предложениях импорта:
- проверьте, имеет ли импортированный модуль атрибут с таким именем
- если нет, попробуйте импортировать подмодуль с этим именем, а затем снова проверьте импортированный модуль на наличие этого атрибута
- если атрибут не найден,
ImportError
вызывается.- в противном случае ссылка на это значение сохраняется в локальном пространстве имен, используя имя в
as
предложении, если оно присутствует, в противном случае используя имя атрибута
Ответ №2:
Да, это так.
Проверьте все способы, которыми можно импортировать модуль в python: https://docs.python.org/2/reference/simple_stmts.html#the-import-statement