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的更多內容!

推薦閱讀: