Python中的高階模組話題

2021-09-29 01:23:10 字數 1959 閱讀 3893

_x以及__all__的使用

把下劃線放在變數名之前(例如,_x),可以防止客戶端使from * 語句匯入模組名時,把其中的那些變數名複製出去。因為from * 會把所有的變數名複製出去,匯入者可能得到超出它所需的部分變數或者可能會覆蓋匯入者內的變數。而這種寫法不是像c++那樣的「私有」宣告,還是可以使用其他匯入形式得到並修改這類變數名的,例如,使用import語句。

此外,也可以在模組頂層把變數名的字串列表賦值給變數__all__,以達到類似與_x命名慣例的隱藏效果。例如:

__all__ = ['error', 'encode', 'decode'] # export these only
使用這功能時,from * 語句只會把列在__all__列表中的這些變數名複製出來。事實上,這與_x慣例相反:__all__是指出要複製的變數名,而_x是指出不被複製的變數名。python會先尋找模組內的__all__列表;如果沒有定義的話,from * 就會複製出開頭沒有下劃線的所有變數名。同樣,__all__列表只對from * 語句形式有效,它並不是私有宣告。

模組搜尋路徑是乙個目錄列表,可以通過環境變數pythonpath以及可能的.pth路徑檔案進行定製。python程式本身修改搜尋模組路徑,是通過修改名為sys.path(內建模組sys的path屬性)的內建列表。sys.path在程式啟動時就會進行初始化,但之後,可以隨意對其元素進行刪除、附加和重設。

>>> import sys

>>> sys.path

['',

'c:\\users\\zhaopp5\\documents\\crise\\py_notebook',

'd:\\software\\anaconda\\python37.zip',

'd:\\software\\anaconda\\dlls',

'd:\\software\\anaconda\\lib',

'd:\\software\\anaconda',

'd:\\software\\anaconda\\lib\\site-packages',

'd:\\software\\anaconda\\lib\\site-packages\\hello-1.0-py3.7.egg',

'd:\\software\\anaconda\\lib\\site-packages\\win32',

'd:\\software\\anaconda\\lib\\site-packages\\win32\\lib',

'd:\\software\\anaconda\\lib\\site-packages\\pythonwin',

'd:\\software\\anaconda\\lib\\site-packages\\ipython\\extensions',

'c:\\users\\zhaopp5\\.ipython']

>>> import string

一旦做了這類修改,就會對python程式中將要匯入的地方產生影響,因為所有匯入和檔案都共享了同乙個sys.path列表。事實上,這個列表可以任意修改:

>>> sys.path = [r'd:\\tmp']

>>> sys.path

['d:\\tmp', 'c:\\lp4e\\examples']

>>> import string

traceback (most recent call last):

file "", line 1, in i mporterror: no module named string

因此,可以使用這個技巧,在python程式中動態配置搜尋路徑。不過小心:如果從路徑中刪除重要目錄,就無法獲取一些關鍵的工具了。

此外,使用以上設定方法只在修改的python會話或程式(即程序)中才會存續。在python結束後,不會保留下來。而pythonpath和.pt**件路徑配置是儲存在作業系統中,儲存在設定的環境變數中的,而不是執行中的python程式。

python學習手冊筆記 24 高階模組話題

00.把下劃線放在變數名前面,可以防止客戶端from 語句匯入模組名時,把其中的那些變數名賦值出來。這其實時為了對命名空間的破快最小化。01.可以把模組頂層把變數名的字串列表賦值給變數 all 以達到類似於 x命名慣例的隱藏效果。02.name 和 main a.如果檔案是以頂層程式檔案執行,在啟動...

Python 高階 模組

coding utf 8 分拆多個py檔案,同乙個名字的變數互不影響 python中包就是資料夾,但是資料夾下必須有乙個 init py 檔案才行 python中動態匯入模組 如果匯入的模組不存在,python直譯器會報 importerror 錯誤 import something traceba...

python 高階 模組

模組匯入 模組概念 在 python 中,乙個檔案就是乙個模組 將多個檔案放在乙個資料夾內進行組織管理的形式稱為包 模組匯入方式 import from import 使用模組別名 可以使用 as 在匯入模組後,為模組新增別名,方便程式中引用 模組搜尋順序 模組在搜尋時,根據 sys 模組中定義的 ...