自學Python之路-Python基礎+模塊+面向對象
自學Python之路-Python網絡編程
自學Python之路-Python併發編程+數據庫+前端
自學Python之路-django
html
類的概念在許多語言中出現,很容易理解。它將數據和操做進行封裝,以便未來的複用。前端
一般模塊爲一個文件,直接使用import來導入就行了。能夠做爲module的文件類型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。python
在建立了一個腳本文件後,定義了某些函數和變量,可重複調用。程序員
任何的python程序均可以做爲模塊。數據庫
2.1 模塊導入django
每一個模塊都有本身的私有符號表,全部定義在模塊裏面的函數把它當作全局符號表使用。編程
模塊能夠導入其餘的模塊。一般將import語句放在模塊的開頭,被導入的模塊名字放在導入它的模塊的符號表中。網絡
from module import names #能夠直接從模塊中導入名字到符號表,但模塊名字不會被導入。 from module import * #能夠把模塊中的全部名字所有導入,除了那些如下劃線開頭的名字符號(不建議使用)。
import socket, os, regex #用逗號分割模塊名稱就能夠同時導入多個模塊 import socket as net, thread as threads #模塊導入時可使用 as 關鍵字來改變模塊的引用對象名字 from socket import gethostname #使用from語句能夠將模塊中的對象直接導入到當前的名字空間. from語句不建立一個到模塊名字空間的引用對象,而是把被導入模塊的一個或多個對象直接放入當前的名字空間 from socket import gethostname, socket from #from支持逗號分割的對象 from socket import * #載入全部對象到當前名字空間,只能導入__all__列表中存在的對象 from socket import gethostname as hostname #as 和 from 聯合使用 只能用於一個模塊的最頂層
2.2 查看模塊 併發
內建函數dir()能夠查看模塊定義了什麼名字(包括變量名,模塊名,函數名等):dir(模塊名),沒有參數時返回全部當前定義的名字app
2.3 模塊搜索路徑
#module2.py import sys import os print sys.path workpath = os.path.dirname(os.path.abspath(sys.argv[0])) sys.path.insert(0, os.path.join(workpath, 'modules')) print sys.path
2.3 其餘的要點
模塊能像包含函數定義同樣,可包含一些可執行語句。這些可執行語句一般用來進行模塊的初始化工做。這些語句只在模塊第一次被導入時被執行。這很是重要,有些人覺得這些語句會屢次導入屢次執行,其實否則。
模塊在被導入執行時,python解釋器爲加快程序的啓動速度,會在與模塊文件同一目錄下生成.pyc文件。咱們知道python是解釋性的腳本語言,而.pyc是通過編譯後的字節碼,這一工做會自動完成,而無需程序員手動執行。
3.1 一般包老是一個目錄,可使用import導入包,或者from + import來導入包中的部分模塊(把解決一類問題的模塊放在同一個文件夾裏,這個文件夾就是「包」)。
包目錄下爲首的一個文件即是 __init__.py , 而後是一些模塊文件和子目錄,假如子目錄中也有 __init__.py 那麼它就是這個包的子包了。(可是在python3裏面沒有__init__.py也不會出問題,可是在python2.7裏面就不能夠。)
(__init__.py文件,主要是爲了不將文件夾名看成普通的字符串。__init__.py的內容能夠爲空,通常用來進行包的某些初始化工做或者設置__all__值,__all__是在from package-name import *這語句使用的,所有導出定義過的模塊。)
結構以下:
3.2 import語句語法:
遵循原則:凡是在導入時帶點的,點的左邊必須是一個包。
from package import item
item能夠是package的子模塊或子包,或是其餘的定義在包中的名字(好比一個函數、類或變量)
首先檢查item是否認義在包中,不過沒找到,就認爲item是一個模塊並嘗試加載它,失敗時會拋出一個ImportError異常。
import item.subitem.subsubitem
最後一個item以前的item必須是包,最後一個item能夠是一個模塊或包,但不能是類、函數和變量
from pacakge import *
若是包的__init__.py定義了一個名爲__all__的列表變量,它包含的模塊名字的列表將做爲被導入的模塊列表。
若是沒有定義__all__, 這條語句不會導入全部的package的子模塊,它只保證包package被導入,而後導入定義在包中的全部名字。
import PackageA.SubPackageA.ModuleA 使用時必須用全路徑名
from PackageA.SubPackageA import ModuleA 能夠直接使用模塊名而不用加上包前綴
from PackageA.SubPackageA.ModuleA import functionA 直接導入模塊中的函數或變量
import Graphics.Primitive.fill #導入模塊Graphics.Primitive.fill,只能以全名訪問模塊屬性,例如 Graphics.Primitive.fill.floodfill(img,x,y,color). from Graphics.Primitive import fill # 導入模塊fill ,只能以 fill.屬性名這種方式訪問模塊屬性,例如 fill.floodfill(img,x,y,color). from Graphics.Primitive.fill import floodfill #導入模塊fill ,並將函數floodfill放入當前名稱空間,直接訪問被導入的屬性,例如 floodfill(img,x,y,color).
絕對路徑:
相對路徑
......