P2.2 調用自己編寫的Python包中的函數

* 注:如何讓自己編寫的Python包能夠被Python執行時被找到請參考“P2.1 讓自己編寫的Python庫可以被找到(簡化版)”一文。


本文將舉例詳細講解如何調用第三方包中的函數,或者其中的對象類及對象方法(函數)。下面先看看一個第三方包編寫的例子:


* 注:對象類中定義的函數一般稱為方法。有關對象的簡要知識,請參考“13 極速瞭解Python中的對象”一文。


def outTest():

print('outTest')


class pytk:

@classmethod

def test(cls):

print('test')


if __name__ == '__main__':

pytk.test()

這個包的文件名為pytk.py,裡面定義了一個函數outTest和一個類pytk,而pytk這個類僅有一個成員函數test(注意是類函數,而不是實例函數),這些類和函數均可以被其他Python程序在引用了本包後使用。而pytk.py這個文件本身也可以被執行,因為裡面“if __name__ == '__main__': ”這個條件判斷分支就是判斷如果當該包被直接執行時,就執行該分支下面的那些代碼。因此,直接執行pytk.py這個文件時,將調用pytk類的類函數test。


在其他Python代碼中如果要調用該包,可以用下面的方式:


from pytk import pytk

import pytk as pt


if __name__ == '__main__':

pytk.test()

pt.pytk.test()

pt.outTest()


第一種方法是用“from pytk import pytk”這樣的導入語句,表示從pytk包中導入pytk這個類,之後主程序中就可以用 pytk.test()這種調用方式了。這樣的導入方式也可以用於導入某個包中的函數,不一定是對象類。注意第一個pytk指的是包名(即pytk.py的文件名前綴部分),第二個pytk指的是其中定義的pytk這個對象類,這兩個名字是可以不同的。本例中雖然名字相同,但不要混淆了。


第二種方法是直接導入pytk這個包(這裡為了避免與上面的導入語句混淆,給pytk包導入時起了個別名pt),然後下面需要用加上包名前綴的方式逐步調用,例如:pt.pytk.test()表示調用pt包中pytk對象類的成員函數test; pt.outTest()則表示調用pt包中的outTest函數,該函數不屬於任何對象類。


整個代碼的執行結果如下:


P2.2 調用自己編寫的Python包中的函數


注意其中也演示了直接執行pytk.py這個包的結果。


分享到:


相關文章: