python的導(dǎo)入機制包含三種主要方式:import語句,importlib.import_module() 和內(nèi)建的__import__()函數(shù)。
一. import語句
import語句結(jié)合兩個操作;它搜索指定的模塊,然后將該搜索的結(jié)果綁定到本地作用域中的名稱。 import語句的搜索操作被定義為使用適當(dāng)?shù)膮?shù)調(diào)用__import __()函數(shù)。 __import __()的返回值用于執(zhí)行import語句的名稱綁定操作。import語句與直接調(diào)用__import __()區(qū)別在于import語句會執(zhí)行名稱綁定操作,而__import __()不會。
import語句分兩種:
1.基本導(dǎo)入語句(無from)
找到一個模塊,如果需要,加載和初始化它在import語句發(fā)生的作用域的本地命名空間中定義一個或多個名稱。當(dāng)語句包含多個子句(由逗號分隔)時,為每個子句分別執(zhí)行兩個步驟,就像子句已被分離為單個import語句一樣 當(dāng)語句包含多個子句(由逗號分隔)時,為每個子句分別執(zhí)行兩個步驟,就像子句已被分離為單個import語句一樣。查找過加載模塊的過程詳見下一篇。如果請求的模塊被成功檢索,它將通過以下三種方式之一在本地命名空間中可用:如果模塊名稱后跟as,則as后的名稱直接綁定到導(dǎo)入的模塊。如果沒有指定其他名稱,并且正在導(dǎo)入的模塊是頂級模塊,則模塊的名稱在本地命名空間中綁定為對導(dǎo)入模塊的引用。如果正在導(dǎo)入的模塊不是頂級模塊,則包含該模塊的頂級包的名稱在本地命名空間中被綁定為對頂級包的引用。導(dǎo)入的模塊必須使用其完全限定名稱而不是直接訪問。 2.from形式 找到在from子句中指定的模塊,如果需要,加載和初始化它; 對于在import子句中指定的每個標(biāo)識符:檢查導(dǎo)入的模塊是否具有該名稱的屬性如果沒有,請嘗試導(dǎo)入具有該名稱的子模塊,然后再次檢查導(dǎo)入的模塊的該屬性如果找不到該屬性,則會引發(fā)ImportError否則,對該值的引用存儲在本地命名空間中,如果存在,則使用as子句中的名稱,否則使用屬性名稱例子:import foo # foo imported and bound locallyimport foo.bar.baz # foo.bar.baz imported, foo bound locallyimport foo.bar.baz as fbb # foo.bar.baz imported and bound as fbbfrom foo.bar import baz # foo.bar.baz imported and bound as bazfrom foo import attr # foo imported and foo.attr bound as attr
新聞熱點
疑難解答