新四季網

python中import函數的用法(Python的import語句Win10)

2023-09-21 22:52:43 2

Python的import語句,作用是將模塊或包導入當前程序中。

import語句的語法結構定義(文法規則)如下:

import_stmt ::= "import" module ["as" identifier] ("," module ["as" identifier])*

| "from" relative_module "import" identifier ["as" identifier]

("," identifier ["as" identifier])*

| "from" relative_module "import" "(" identifier ["as" identifier]

("," identifier ["as" identifier])* [","] ")"

| "from" relative_module "import" "*"

module ::= (identifier ".")* identifier

relative_module ::= "."* module | "."

看到這個語法結構定義及其使用的符號,個人感覺這是巴克斯範式和正則表達式的結合體。「::=」在巴克斯範式中可讀作「定義為」;一條文法規則從形式上看是由「::=」連接的左右兩個部分,「::=」左側的符號稱作非終結符(計算機基礎學科——編譯原理中的術語),就是在程序代碼中不會出現的符號;「::=」右側的符號串由一個或多個終結符和非終結符組成。編譯器或解釋器(Python是解釋型語言,對程序解釋執行)按照文法規則對程序代碼進行理解並執行(編譯或解釋)。

上述import語句語句的文法定義中,「::=」右側的符號串中,雙引號中的符號串(字符或字符串)是在原始碼中出現的關鍵字;中括號、小括號、以及星號是正則表達式中使用的非符號。

上述語句的文法定義可從命令行獲取,也可從幫助文檔得到。

命令行獲取方式,在命令行依次鍵入如下命令:

python

help

import

在幫助文檔中,查看的路徑是:「The Python Language Reference」->「Simple statements」->「The import statement」。

為了加深印象,將上述英文部分翻譯為中文。個人感覺理解這些幫助文檔還是需要有一定的理論和實踐基礎的,翻譯過程中有不少困難需要克服。需要對作業系統、編譯原理、數據結構等有一定的了解:用戶要求作業系統執行Python程序,作業系統按Python程序的要求創建Python進程,Python進程(類似於與現實社會中的組織、機構)中有一個至關重要的名為Python解釋器的存在,Python解釋器完成對用戶輸入的命令或程序的解釋執行,使用了一個名為名空間(namespace)的數據結構。

以下為譯文(譯文中動詞的執行者應該是Python解釋器)。水平有限,僅供參考

基本的import語句(沒有from子句)分兩步執行:

1. 查找一個模塊,必要時加載該模塊並進行初始化

2. 在本地名空間的import語句的作用範圍內定義一個或多個名稱。

當語句包含多個子句(用逗號分隔)時,將為每個子句分別執行這兩個步驟,就像這些子句已被分隔為單獨地導入語句一樣。

關於第一步(查找和加載模塊)的更詳細地描述可參見「import系統」(import system),「import系統」還描述了可導入的各種類型的包和模塊,以及可用於定製導入系統的所有掛鈎(hooks)。

請注意,若此步驟失敗,則表示無法定位模塊或者在初始化模塊時發生錯誤(包括執行模塊代碼時發生的錯誤)。

如果成功檢索到被請求的模塊,將通過以下三種方式之一使得該模塊在本地空間中可用:

•如果模塊名稱後接as,則as後的名稱將直接綁定到導入的模塊。

•如果未指定其他名稱,並且要導入的模塊是頂級模塊,則該模塊的名稱將綁定在本地命名空間中,作為被導入模塊的引用。

•如果要導入的模塊不是頂級模塊,則包含該模塊的頂級包的名稱將綁定在本地命名空間中,作為對頂級包的引用。必須使用被導入的模塊的完整限定名訪問該模塊,而不能直接訪問。

對from結構的處理要複雜一些:

1. 查找from子句中指定的模塊,必要時加載並初始化;

2. 對於import子句中指定的每個標識符:

(1)檢查被導入的模塊是否具有與標識符同名的屬性;

(2)若沒有,則嘗試導入具有該名稱的子模塊,然後再次檢查被導入的子模塊的同名屬性;

(3)如果未找到屬性,則產生導入錯誤(ImportError)。

(4)如果找到,則將一個對該值的引用存儲在本地命名空間中;引用名的確定規則是:如果存在as子句,則使用其中的名稱,否則使用屬性名稱。

例子:

import foo # foo imported and bound locally (foo被導入,與本地名foo綁定)

import foo.bar.baz # foo.bar.baz imported, foo bound locally (foo.bar.baz被導入,foo與本地名foo綁定)

import foo.bar.baz as fbb # foo.bar.baz imported and bound as fbb (foo.bar.baz被導入,並與fbb綁定)

from foo.bar import baz # foo.bar.baz imported and bound as baz (foo.bar.baz被導入,域名baz綁定)

from foo import attr # foo imported and foo.attr bound as attr (foo被導入,並將foo.attr域名attr綁定)

如果標識符列表被星號(「*」)替換,則模塊中定義的所有公共名稱都將綁定到import語句所在範圍的本地命名空間中。

模塊定義的公共名稱是通過檢查模塊名稱空間中名為__all__的變量來確定的,如果定義了該變量,則它必須是由該模塊定義或導入的名稱組成的字符串序列。__all__中給出的名稱都被視為公共名稱,並且必須存在。如果沒有定義變量__all__,公共名稱集包括在模塊命名空間中找到的所有名稱,這些名稱以下劃線字符開頭('_')。__all__應包含所有的公共API。它旨在避免意外導出不屬於API的項目(例如導入並在模塊中使用的庫模塊)。

僅允許在模塊級別使用通配符形式的導入(from module import *)。試圖在類或函數定義中使用它將引發語法錯誤。

指定要導入的模塊時,不必指定模塊的絕對名稱。當模塊或包包含在另一個包中時,可以在同一個頂層包中進行相對導入,而不必提及包名稱。通過在from之後的指定模塊或包中使用前導點(leading dots ),可以指定向上遍歷當前包層次結構的高度,而無需指定確切的名稱。一個前導點表示被導入的模塊所在的當前包。兩個點表示上一個包級別。三點是上升兩級,等等。

所以,如果你從一個pkg包的模塊中執行「from . import mod」,將會導致導入「pkg.mod」。如果你在「pkg.subpkg1」中執行「from ..subpkg2 import mod 」將會導致導入「pkg.subpkg2.mod」。相對導入的規範包含在「Package Relative Imports 」部分。

importlib.import_module,用於支持動態確定要加載的模塊的應用程式。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了