溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python自定義模塊是什么

發(fā)布時間:2020-08-04 14:51:40 來源:億速云 閱讀:154 作者:清晨 欄目:編程語言

這篇文章主要介紹Python自定義模塊是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

掌握了導入模塊的語法之后,下一個問題來了,模塊到底是什么?可能有讀者開始摩拳擦掌了,怎樣才能定義自己的模塊呢?

模塊就是 Python 程序。任何 Python 程序都可作為模塊導入。前面我們寫的所有 Python 程序都可作為模塊導入。換而言之,隨便寫的一個 Python 程序,其實都可作為模塊導入。對于任何程序,只要導入了模塊,即可使用該模塊內(nèi)的所有成員。

下面程序定義了一個簡單的模塊(編寫在 module1.py 文件中):

print('這是module 1')
my_book = 'Python入門教程'
def say_hi(user):
    print('%s,您好,歡迎學習Python' % user)
class User:
    def __init__(self, name):
        self.name = name
    def walk(self):
        print('%s正在慢慢地走路' % self.name)
    def __repr__(self):
        return 'User[name=%s]' % self.name

上面程序中第一行代碼執(zhí)行了一條簡單的輸出語句,第二行代碼定義了一個 my_book 變量。接下來程序定義了一個 say_hi() 函數(shù),然后定義了一個 User 類。不難發(fā)現(xiàn),這個程序和我們前面所寫的 Python 程序并沒有太大的區(qū)別,但它依然可以作為模塊導入。

使用模塊的好處在于,如果將程序需要使用的程序單元(比如剛剛定義的 say_hi() 函數(shù)、User 類)定義在模塊中,后面不管哪個程序,只要導入該模塊,該程序即可使用該模塊所包含的程序單元,這樣就可以提供很好的復用(導入模塊,使用模塊),從而避免每個程序都需要重新定義這些程序單元。

為模塊編寫說明文檔

與前面介紹的函數(shù)、類相同的是,在實際開發(fā)中往往也應該為模塊編寫說明文檔;否則,其他開發(fā)者將不知道該模塊有什么作用,以及包含哪些功能。

為模塊編寫說明文檔很簡單,只要在模塊開始處定義一個字符串直接量即可。例如,在上面程序的第一行代碼之前添加如下內(nèi)容:

'''
這是我們編寫的第一個模塊,該模塊包含以下內(nèi)容:
my_book:字符串變量
say_hi:簡單的函數(shù)
User:代表用戶的類
'''

這段字符串內(nèi)容將會作為該模塊的說明文擋,可通過模塊的 __doc__ 屬性來訪問文檔。

為模塊編寫測試代碼

當模塊編寫完成之后,可能還需要為模塊編寫一些測試代碼,用于測試模塊中的每一個程序單元是否都能正常運行。

由于模塊其實也是一個 Python 程序,因此我們完全可以使用 python 命令來解釋和執(zhí)行模塊程序只要模塊中包含可執(zhí)行代碼。比如使用 python module1.py(程序文件名)命令來運行上面的模塊程序,即可看到如下輸出結果:

這是module 1

上面這行輸出是因為 module1.py 程序中包含了一條 print 語句。但棋塊中的變量、函數(shù)、類都沒有得到測試,因此還應該為這些變量、函數(shù)、類提供測試程序。

例如,可以為上面的 module1.py 增加如下測試代碼:

# ===以下部分是測試代碼===
def test_my_book ():
    print(my_book)
def test_say_hi():
    say_hi('孫悟空')
    say_hi(User('Charlie'))
def test_User():
    u = User('白骨精')
    u.walk()
    print(u)

上面代碼為 module1 定義了三個函數(shù),分別用于測試模塊中的變量、函數(shù)和類,不過這三個函數(shù)并沒有得到調(diào)用的機會。因此,如果使用 python 命令來運行上面模塊,程序并不會運行它們。

如果只是簡單地調(diào)用上面的測試程序,則會導致一個問題,那就是當其他程序每次導入該模塊時,這三個測試函數(shù)都會自動運行,這顯然不是我們期望看到的結果。此時希望實現(xiàn)的效果是,如果直接使用 python 命令運行該模塊(相當于測試),程序應該執(zhí)行該模塊的測試函數(shù);如果是其他程序?qū)朐撃K,程序不應該執(zhí)行該模塊的測試函數(shù)。

此時可借助于所有模塊內(nèi)置的 __name__ 變量進行區(qū)分,如果直接使用 python 命令來運行一個模塊,name 變量的值為 __main__;如果該模塊被導入其他程序中,__name__ 變量的值就是模塊名。因此,如果希望測試函數(shù)只有在使用 python 命令直接運行時才執(zhí)行,則可在調(diào)用測試函數(shù)時增加判斷,只有當 __name__ 屬性為 __main__ 時才調(diào)用測試函數(shù)。為模塊增加如下代碼即可:

# 當__name__為'__main__'(直接使用python運行該模塊)時執(zhí)行如下代碼
if __name__ == '__main__':
    test_my_book()
    test_say_hi()
    test_User()

此時再次使用 python module1.py 命令來運行該模塊,可以看到如下輸出結果:

這是module 1
Python入門教程
孫悟空,您好,歡迎學習Python
User[name=Charlie],您好,歡迎學習Python
白骨精正在慢慢地走路
User[name=白骨精]

從上面的測試結果來看,當直接使用 python 命令來運行模塊時,模塊中的測試函數(shù)得到了執(zhí)行。在定義好模塊之后,接下來就要讓 Python 系統(tǒng)能找到并加載該模塊。

以上是Python自定義模塊是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI