2016-10-04 35 views
0

我讀了一些代碼,其中包含以下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 

任何人都可以確認是否是這種情況?

+1

是。否則,如何在導入中定義多個別名? '從本地線程導入t_local,事件爲Harambe,線程爲Banana'。 – Bakuriu

+0

是的,我很積極!我認爲整個Python社區也將是積極的! –

回答

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. 每個在進口子句指定的標識符:
    1. 檢查,如果導入的模塊有這個名字的屬性
    2. 如果沒有,嘗試導入一個子模塊具有該名稱,然後檢查導入的模塊再次針對該屬性
    3. 如果未找到該屬性,則會引發ImportError
    4. 否則,爲該值的引用存儲在本地名稱空間中,as子句中使用的名稱,如果它存在,否則 使用屬性名稱
相關問題