python 模組和包 python模組和包

2021-10-19 20:29:24 字數 3981 閱讀 9963

一. 模組

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 模組名...