第12章 模組 2

2021-06-01 00:31:15 字數 1504 閱讀 6801

12.3 命名空間

命名空間是名稱(識別符號)到物件的對映。向命名空間新增名稱的操作過程涉及繫結識別符號到指定物件的操作(以及給該物件的引用計數加1)。改變乙個名字的繫結叫做重新繫結,刪除乙個名字叫做解除繫結。

執行期間有兩個或三個活動的命名空間。這三個命名空間分別是區域性命名空間,全域性命名空間和內建命名空間,但區域性命名空間在執行期間是不斷變化的,所以我們說"兩個或三個"。從命名空間中訪問這些名字依賴於它們的載入順序,或是系統載入這些命名空間的順序。

python直譯器首先載入內建命名空間。它由__buildtins__模組中的名字構成。隨後載入執行模組的全域性命名空間,它會在模組開始執行後變為活動命名空間。

__buildtins__模組包含內建命名空間中內建名字的集合。

如果在執行期間呼叫了乙個函式,那麼將建立出第三個命名空間,即區域性命名空間。我們可以通過globals()和locals()內建函式判斷出某一名字屬於哪個命名空間。

12.3.1 命名空間與變數作用域比較

每個命名空間是乙個自我包含的單元。但從作用域的觀點來看,事情是不同的。所有區域性命名空間的名稱都在區域性作用範圍內。區域性作用以外的所有名稱都在全域性作用範圍內。

12.3.2 名稱查詢、確定作用域、覆蓋

訪問乙個屬性時,直譯器必須在三個命名空間中的乙個找到它。首先從區域性命名空間開始,如果沒有找到,直譯器將繼續查詢全域性命名空間。如果這也失敗了,它將在內建命名空間裡查詢。

12.3.3 無限制的命名空間

python的乙個有用的特性在於你可以在任何需要放置資料的地方獲得乙個命名空間。你可以在任何時候給函式新增屬性(使用熟悉的句點屬性標識).

12.4 匯入模組

python標準庫模組

python第三方模組

應用程式自定義模組

如果在乙個模組的頂層匯入,那麼它的作用域就是全域性的;如果在函式中匯入,那麼它的作用域是區域性的。

12.4.3 多行匯入

from tkinter import (tk, frame)

12.4.4 擴充套件的import語句(as)

有時候你匯入的模組或是模組屬性名稱已經在你的程式中使用了,或者你不想使用匯入的名字,使用自己想要的名字替換模組的原始名稱。

from cgi import fieldstorage as form

12.5 模組匯入的特性

12.5.1 載入時執行模組

載入模組會導致這個模組被「執行」。也就是被匯入模組的頂層**將直接被執行。這通常包括全域性變數以及類和函式的宣告。如果有檢查__name__的操作,那麼它也會被執行。

12.5.2 匯入(import)和載入(load)

乙個模組只被載入一次,無論它被匯入多少次。載入只在第一次匯入時發生。

12.5.4 被匯入到匯入者作用域的名字

只從模組匯入名字的另乙個***是那些名字會成為區域性命名空間的一部分。這可能導致覆蓋乙個已經存在的具有相同名字的物件。而且對這些變數的改變只影響它的區域性拷貝而不是所匯入模組的原始命名空間。也就是說,繫結只是區域性的而不是整個命名空間。

第2章 分支出12章 第2章彙編暫存器

彙編 1.8086cpu有14 個暫存器 通用暫存器 ax bx cx dxsi di sp bp ipcs ss ds es psw 通用暫存器明細 16位暫存器中 ax可以拆分為ah al 累加器 16位暫存器中 bx可以拆分為bh bl 基址暫存器 16 位暫存器中 cx可以拆分為ch cl ...

第12章 繼承

1 單一繼承 2 多重繼承 3 繼承的賦值 1 將派生類的物件賦值給基類的物件 例如father p son s p s 會呼叫賦值運算子 將左邊物件的成員賦值給右邊物件的成員 不能將基類的物件賦值給派生類的物件,因為要呼叫賦值運算子 基類物件中沒有派生類物件自己的成員 2 基類的指標或者引用指向派...

程式設計珠璣第12章

正文 如何生成0 n 1內的m個隨機整數 1 方法一 比如要從5個數里選出2個數,第乙個數的概率是2 5,第二個數的概率是1 4,然後是0 3 那麼現在已經很清楚了。可以寫 如下 for int i 0 i n i if rand n i m 2 方法二 可以用乙個set,每生成乙個隨機,就去set...