Python學習筆記(十四) 模組高階

2021-06-16 23:46:49 字數 2901 閱讀 4058

以mark lutz著的《python學習手冊》為教程,每天花1個小時左右時間學習,爭取兩周完成。 --- 寫在前面的話

2013-7-23 21:30 學習筆記

1,包匯入是把計算機上的目錄變成python的命名空間。包匯入時也可以使用import和from語句。目錄路徑只能以點號.間隔。例如有這樣乙個目錄結構:

dir0/dir1/dir2/mod.py
則匯入語句如下:

import dir1.dir2.mod
匯入時必須遵循如下規則:

2,__init__.py可以包含python**,也可以為空。它可以防止python搜到名稱相同的目錄。通常__init__.py中會讓一些初始化的**。python在首次匯入時會自動執行該檔案。

3,使用from *語句時,需要在__init__.py檔案中用__all__列表定義需要匯入的子模組的名稱清單。

# file: dir1/__init__.py

x = 1

print 'dir1 init'

# file: dir1/dir2/__init__.py

y = 2

print 'dir2 init'

# file: dir1/dir2/mod.py

z = 3

print 'in mod.py'

匯入包:

import dir1.dir2.mod

print dir1.x

print dir1.dir2.y

print dir1.dir2.mod.z

第一次執行該檔案,輸出結果:

dir1 init

dir2 init

in mod.py12

3

4,在模組中隱藏資料是一種慣例,而不是一種語法約束。

5,使用from *語句時,python會先尋找模組內的__all__列表,把其中的變數複製出來;如果沒有定義__all__,則會複製開頭沒有單下劃線(_x)的所有變數名。

__all__ = ["var1", "var2", "var3"]
要注意,這些約定只對from *有效,對import無效。

6,有些新的擴充套件特性需要使用類似如下的**來匯入。例如:

from __future__ import featurename

7,每個模組都有乙個__name__內建屬性,python會自動設定它。如果檔案以頂層程式檔案執行,__name__屬性會被設定成'__main__';如果檔案被匯入,__name__會被設定成客戶端所了解的模組名。該特性常用來實現單元測試。例如:

def test():

print "this is a test."

if __name__ == '__main__':

test()

8,通過修改sys.path的值可以修改模組的搜尋路徑。但這中修改只在該程序中才有效,python結束後一切恢復如初。例如:

import sys

print sys.path

print sys.path

輸出結果為:

['', 'c:\\python27\\python27.zip', 'c:\\python27\\dlls', 'c:\\python27\\lib', 'c:\\python27\\lib\\plat-win', 'c:\\python27\\lib\\lib-tk', 'c:\\python27', 'c:\\python27\\lib\\site-packages']

['', 'c:\\python27\\python27.zip', 'c:\\python27\\dlls', 'c:\\python27\\lib', 'c:\\python27\\lib\\plat-win', 'c:\\python27\\lib\\lib-tk', 'c:\\python27', 'c:\\python27\\lib\\site-packages', 'd:\\a\\b']

9,imort as擴充套件可以讓模組在指令碼中有自定義的名稱,這可以讓一些名稱較長的變數具有短名稱。包匯入時也可以使用。例如:

import longmodulename as name1

from module imort longname as name2

10,由於import和from語句總是預設在sys.path的絕對路徑中尋找模組,這使得如果當前目錄下有個模組檔名與系統模組名重名,則會匯入系統模組名。通過在from語句中使用.(表示當前目錄)和..(表示當前目錄的父目錄)可以實現相對匯入,從而避免這個問題。例如:

from . import d			# imports a.b.d

from .. import e # imports a.e

from ..f import g # imports a.f.g

11,通常情況下,最好不要通過匯入和過載來啟動程式。

12,函式主體內的**在函式被呼叫時採用執行。

13,不能遞迴imort,即不能a模組import b模組,b模組import a模組

14,通過變數名字串匯入模組有兩種方法:

modname = 'mod'

exec 'import ' + modname

modname = 'mod'

mod = __import__(modname)

python 學習筆記(十四)

coding utf8 author liwei 定製類的練習 class student object def init self,name self.name name a student liwei print a str 對以上例子的使用 print str 對以上例子的使用 class s...

Python學習筆記(十四)

十六章 json 過長的位址名不能使用分行 filename d pycharmprograms codes 導致 syntaxerror eol while scanning string literal python非字串 現中文字元 data pd.dataframe data zip lon...

python學習筆記 十四 unittest

python中有乙個自帶的單元測試框架是unittest模組,用它來做單元測試,它裡面封裝好了一些校驗返回的結果方法和一些用例執行前的初始化操作。在說unittest之前,先說幾個概念 testcase 也就是測試用例 testsuite 多個測試用例集合在一起,就是testsuite testlo...