一. 模組
python 模組(module),是乙個 python 檔案,以 .py 結尾,包含了 python 物件定義和python語句。
模組能定義函式,類和變數,模組裡也能包含可執行的**。
二. 匯入模組
1. 語法:
import模組名from 模組名 import功能名from 模組名 import *
import模組名 as 別名from 模組名 import 功能名 as 別名
注意:這裡的import後面的模組名一定是模組的全名(全路徑名):即 包名.模組名
2. 示例:
2.1 定義模組:
建立mymodule.py檔案,並編寫方法sum,定義變數name:
defsum(a, b):return a+b
name= 'mymodule'
2.2 匯入模組:
在demo.py 檔案中匯入並使用sum方法
2.2.1 "import 模組名" 方式匯入模組
importmymodule
c= mymodule.sum(1, 2)print(c) #3
說明:1. 這種方法匯入後,會匯入模組中所有的內容
2. 功能呼叫方法:模組名.功能
2.2.2 "from 模組名 import 功能名" 方式匯入模組
from mymodule importsum
c= sum(1, 2)print(c) #3
print(name) #nameerror: name 'name' is not defined
說明:1. 匯入的時sum這個功能,因此呼叫時直接使用sum即可,不需要模組名. 的方式呼叫
2. mymodule模組中定義的其他功能沒有匯入,不可呼叫,如上面的name屬性。
3. 也可在import後面使用逗號分隔匯入多個功能如:
from mymodule importsum, name
c= sum(1, 2)print(c) #3
print(name) #mymodule
4. 如果需要匯入模組所有功能,則import後面使用*號實現
from mymodule import *c= sum(1, 2)print(c) #3
print(name) #mymodule
2.2.3 給匯入的模組或功能取別名
importmymodule as cal
c= cal.sum(1, 2)print(c) #3
from mymodule importsum as ss
c= ss(1, 2)print(c) #3
說明:取別名後,只能使用別名
三. 自定義模組
在python中,每個python檔案都可以作為乙個模組,模組的名字就是檔案的名字。也就是說自定義模組名必須要符合識別符號命名規則。
建立乙個.py的檔案,並在檔案中定義模組功能,即建立了乙個模組,如上面的mymodule就是乙個自定義的模組
3.1 模組中的__name__屬性
__name__ 預設值為模組名,當前執行的.py檔案的__name__的值自動被設定為"__main__"
importmymoduleprint(__name__) #__main__
print(mymodule.__name__) #mymodule
說明1. 當前執行的檔案,此屬性值為"__main__",而匯入的mymodul模組的此屬性值為模組名:mymodule
2. 一般使用這一特點定義測試**,如在mymodule 中定義測試**:
defsum(a, b):return a+b
name= 'mymodule'
if __name__ == '__main__':print("測試**")
3. 如果沒有 if __name__ == '__main__': 這行**,當通過import mymodule方式匯入模組時,測試**會執行,而使用了這個判斷後,由於在別的模組匯入後,mymodule模組的名稱為mymodule,測試**不會執行
四. 模組定位順序
當匯入乙個模組,python解析器對模組位置的搜尋順序是:
1. 當前目錄
2. 如果不在當前目錄,python則搜尋在shell變數pythonpath下的每個目錄。
3. 如果都找不到,python會察看預設路徑。unix下,預設路徑一般為/usr/local/lib/python/
模組搜尋路徑儲存在system模組的sys.path變數中。變數裡包含當前目錄,pythonpath和由安裝過程決定的預設目錄。
- 注意
- 自己的檔名不要和已有模組名重複,否則導致模組功能無法使用
- `使用from 模組名 import 功能`的時候,如果功能名字重複,呼叫到的是最後定義或匯入的功能。
from mymodule importsumdefsum(a, b):return 100
print(sum(1, 2)) #100
defsum(a, b):return 100
from mymodule importsumprint(sum(1, 2)) #3
說明:1.總規則:後定義的會覆蓋先定義的
2.上面**中後匯入mymodule則sum使用的mymodule中的sum,否則使用的是當前檔案的sum
3. import 模組名的時候,不用擔心功能名稱重複,因為是通過模組名.功能的方式呼叫。不過要注意模組名與其他變數名稱重複
五. `__all__`
如果乙個模組檔案中有`__all__`變數,當使用`from *** import *`匯入時,只能匯入這個列表中的元素。
在mymodule中新增`__all__`屬性:
__all__ = ['sum'] #使用字串,而不是變數
defsum(a, b):return a+b
name= 'mymodule'
匯入所有功能並呼叫:
from mymodule import *
print(sum(1, 2)) #3
print(name) #nameerror: name 'name' is not defined
說明:1. __all__列表中使用字串,而不是變數
2. 上面的name沒有放在all列表中,因此匯入全部功能後,不包括name
六. 包
1.包包將有聯絡的模組組織在一起,即放到同乙個資料夾下,並且在這個資料夾建立乙個名字為`__init__.py` 檔案,那麼這個資料夾就稱之為包。
2.新建包
[new] — [python package] — 輸入包名 — [ok] — 新建功能模組(有聯絡的模組)。
注意:新建包後,包內部會自動建立`__init__.py`檔案,這個檔案控制著包的匯入行為。
新建包mypackage和包中的模組mymodule1
defprint_m():print("module1...")
3. 在demo.py中匯入包中的模組
3.1 包名.模組名 方式匯入
語法import包名.模組名
包名.模組名.目標功能
示例:importmypackage.mymodule1
mypackage.mymodule1.print_m()#module1...
3.2 from 包名 import * 匯入包中的模組
這種方法匯入模組,必須在`__init__.py`檔案中新增`__all__ = `,控制允許匯入的模組列表。如果列表為空,則無法匯入任何模組
示例:不在__init__.py中新增__all__列表時:
from mypackage import *mymodule1.print_m()#nameerror: name 'mymodule1' is not defined
新增__all__列表並指定可匯入模組:
__all__ = ["mymodule1"]
再次執行:
from mypackage import *mymodule1.print_m()#module1...
Python 模組和包
包 模組的一種組織結構 乙個包由多個模組構成,即包含多個.py檔案 1匯入包的幾種形式 1 import module 將module模組中屬性列表的所有屬性匯入執行環境,使用時需要新增模組名稱,例如 module.func 2 from module import attrname,fucnnam...
python 模組和包
1.內建模組 本身就帶有的庫,就叫做python的內建的庫。模組 庫 一些常見的內建模組 os 和作業系統相關 os.path sys 和系統相關 sys.path re 正規表示式 2.第三方模組 非python本身自帶的庫,就是所謂的第三方的庫 3.模組的匯入 import as yy from...
python模組和包
2.包 package 3.發布模組 模組是 python 程式架構的乙個核心概念 1 import 匯入 import 模組名1,模組名2import 模組名1 import 模組名2 使用as指定模組的別名 如果模組的名字太長,可以使用as指定模組的名稱,以方便在 中的使用 import 模組名...