从模块导入多个类的语法

时间:2016-10-04 10:52:32

标签: python

我正在阅读一些包含以下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

有人可以确认是否是这种情况吗?

2 个答案:

答案 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表单使用稍微复杂的过程:

     
      
  1. 找到from子句中指定的模块,必要时加载并初始化它;
  2.   
  3. 对于import子句中指定的每个标识符:      
        
    1. 检查导入的模块是否具有该名称的属性
    2.   
    3. 如果没有,尝试导入具有该名称的子模块,然后再次检查导入的模块中的该属性
    4.   
    5. 如果找不到该属性,则会引发ImportError
    6.   
    7. 否则,对该值的引用存储在本地名称空间中,如果存在则使用as子句中的名称,否则   使用属性名称
    8.   
  4.   

答案 1 :(得分:0)

是的,是的。

查看可以在python中导入模块的所有方法: https://docs.python.org/2/reference/simple_stmts.html#the-import-statement