我正在阅读一些包含以下import语句的代码:
from threading import local as thread_local, Event, Thread
起初这种语法让我困惑,但我认为它等同于:
from threading import local as thread_local
from threading import Event
from threading import Thread
有人可以确认是否是这种情况吗?
答案 0 :(得分:2)
您可以在官方文档中查看此内容。这是documentation for the import
syntax:
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
子句中指定的模块,必要时加载并初始化它;- 对于import子句中指定的每个标识符:
醇>
- 检查导入的模块是否具有该名称的属性
- 如果没有,尝试导入具有该名称的子模块,然后再次检查导入的模块中的该属性
- 如果找不到该属性,则会引发
ImportError
。- 否则,对该值的引用存储在本地名称空间中,如果存在则使用
as
子句中的名称,否则 使用属性名称
答案 1 :(得分:0)
是的,是的。
查看可以在python中导入模块的所有方法: https://docs.python.org/2/reference/simple_stmts.html#the-import-statement