Python面向對象之模塊詳解
1.1 導入模塊
- import 模塊名
- form 模塊名import 功能名
- form 模塊名 import *
- import 模塊名 as 別名
- import 模塊名 import 功能名 as 別名
以下用math模塊下的 sqrt 驗證
1.1.1 import 模塊名
語法
# 1 導入模塊 import 模塊名 # 推薦使用此種格式 import 模塊名1,模塊名2.... # 不推擠 # 2 調用 模塊名.功能名()
體驗
import math print(math.sqrt(9))
1.1.2 from 模塊名 import 功能名
語法
# 1 導入 from 模塊名 import 功能1,功能2.... # 2 調用 功能()
體驗
from sqrt import math print(sqrt(9))
1.1.3 from …import*
語法
from 模塊名 import*
體驗
from math import* print(sqrt(9))
1.1.4 as 定義別名
把復雜的長的 不好記的模塊名\功能名, as成簡單的
語法
# 模塊定義別名 import 模塊名 as 別名 # 功能定義別名 from 模塊名 import 功能 as 別名
體驗
import math as m print(m.srqt(9)) from math import srqt as s print(s(9))
代碼
# --*coding:utf-8*-- # 需求 驗證math模塊下的 sqrt()開平方計算 """ 步驟 1 導入math模塊 2 驗證sqrt功能 : 調用該模塊下的sqrt功能 """ # 方法一 : import 模塊名;模塊名.功能 import math print(math.sqrt(9)) # 方法二 :from 模塊名 import 功能,功能...;功能調用(功能()) from math import sqrt print(sqrt(6)) # 方法三 :from 模塊名 import* ;調用功能 from math import * print(sqrt(16)) # 方法四-模塊別名: import 模塊名 as 別名;調用功能 別名.功能 import math as mm print(mm.sqrt(16)) # 方法四-功能別名: from math import sqrt as ss from math import sqrt as ss print(ss(9))
1.2 制作模塊
在Python中,每個Python文件都可以作為一個模塊,模塊的名字就是文件名
自定義模塊名必須符合標識符命名規則
目標
- 作用
- 制作步驟和書寫代碼
- 掌握註意事項
為啥要制作模塊:
程序員在開發中,對於一些頻繁使用的代碼,進行封裝 ,制作成一個滿足需要的模塊,在之後的工資中再去調用
1.2.1 定義模塊
新建一個Python文件,命名my_module1.py,並定義testA函數
# 此處 : 此模塊相關的解釋性文字,如 一個函數 完成任意兩個數字相加 def testA(a,b): print(a+b)
1.2.2 測試模塊
寫完一個模塊, 測試裡面是否有bug
在實際的開發中, 當一個開發人員編寫完一個模塊後, 為瞭讓模塊能夠在項目中達到想要的效果, 這個開發人員會自行在py文件中加入一些測試信息,例如在 my_module1.py中添加測試代碼.
def testA(a,b): print(a+b) testA(5,6)
此時,無論當前文件,還是其他導入瞭該模塊的文件, 在運行時,都會執行testA函數的調用. 特別是 其他函數調用是 會一並調用瞭 測試函數,這是我們不希望看到的.
解決辦法如下:
引入 name 系統變量, 上面的代碼變成
# --*coding:utf-8*-- # 需求 :一個函數 完成任意兩個數字相加 def testA(a,b): print(a+b) # 測試信息 # text(5,6) # 驗證1 這樣會在其他函數調用時,被執行 """ 驗證2 print(__name__) 測試 在當前函數下,和被其他文件調用時,返回結果: 內部 返回 __main__ 外部 返回 本函數名 """ # 根據 __name__ 特性,做if 判斷 if __name__ == "__main__": testA(2,5) """=====輸出==自身調用的時候 執行測試語句==""" 7
1.2.3 外部調用
# --*coding:utf-8*-- # 導包 import my_module1 # 調用 模塊名.功能 my_module1.testA(6,12) """==輸出==外部調用是 不執行測試代碼==""" 18
1.3 模塊定位順序
當導入一個模塊,Python解析器對模塊位置的搜索順序是 由近及遠
- 當前模塊
- 當前沒有, 則搜索在shell變量PYTHONPATH下的每個目錄
- 還沒有,Python會查看默認路徑(不同的系統不一樣),如 unix下,默認路徑為 /usr/local/lib/Python
** PYTHONPATH 安裝程序是的默認目錄
註意
- 自己的文件名 不要和已有的模塊名重復, 否則會導致模塊功能無法使用
- 使用from 模塊名 import 功能 的時候, 如果功能名字重復, 誰後面 ,誰起作用.
1.4 all
目標
- 什麼是__all__列表
- 作用
- 寫代碼 分析作用 體驗
什麼是all列表 就是模塊中的一個變量,取值是一個列表[]的形式
作用:當模塊中有__all__時,如果使用from 模塊名 import * 導入時,隻能導入這個all後面列表的元素
my_module1模塊代碼
___all__=["testA] def testA(): print("我是testA") def testB(): print("我是testB")
執行結果是 :
我是testA
如果沒有__all__=[] 變量
執行結果將是: all 所有的
我是testA
我是testB
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!