Python中包(package)的調用方式
Python中包(package)的調用方式
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
一.什麽是Python Package
如何區分你看到的目錄是一個Python Package包呢?其實很簡單,你只要看這個名錄下是否有“__init__.py”這個文件就好了,如果有那麽就是Python Package包,如果沒有,就說嘛你看到的就是個普通的目錄,如下圖,你就可以看出來"calcuate"和"Log"就是一個Python Package包,而"yinzhengjie"就是一個目錄,而判斷的依據就是是否包含_init__.py文件。"yinzhengjie"這個目錄下包含三個文件,即“calcuate”,“Log”和“bin.py"文件。
二.主程序調用包中的模塊
目錄結構如上圖所示,以下是其中各個文件中的代碼。
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 8 def Add(x,y): 9 return x + ysc_cal
1logger#!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 import logging as log 8 9 def GetLogger(): 10 logger = log.getLogger() 11 12 fh = log.FileHandler("log.txt") 13 14 logger.addHandler(fh) 15 16 return logger
以下是bin主程序的代碼。
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 from Log import logger 8 9 from calcuate import sc_cal 10 11 obj = logger.GetLogger() 12 13 obj.error("This yinzhengjie‘s test error !") 14 15 s1 = sc_cal.Add(100,200) 16 17 print(s1) 18 19 20 21 #以上代碼執行結果如下: 22 300
執行主程序代碼之後,會在執行的目錄中生成一個名稱為“log.txt”的文件。
1 This yinzhengjie‘s test error !log.txt
三.包中模塊的調用
目錄結構如上圖所示,以下是其中各個文件中的代碼。
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 8 def Add(x,y): 9 return x + ysc_cal
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 def Product(x,y): 8 return x * ydome
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 import logging as log 8 9 from Log import dome 10 11 def GetLogger(): 12 logger = log.getLogger() 13 14 fh = log.FileHandler("log.txt") 15 16 logger.addHandler(fh) 17 18 return logger 19 20 print(dome.Product(5,6))logger
以下是bin主程序的代碼。
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 from Log import logger 8 9 from calcuate import sc_cal 10 11 obj = logger.GetLogger() 12 13 obj.error("This yinzhengjie‘s test error !") 14 15 s1 = sc_cal.Add(100,200) 16 17 print(s1) 18 19 20 21 22 #以上代碼執行結果如下: 23 30 24 300
1 This yinzhengjie‘s test error ! 2 This yinzhengjie‘s test error !log.txt
四.同級目錄下的被調用模塊之間的相互調用
目錄結構如上圖所示,以下是其中各個文件中的代碼。
1>.Log 包中的源代碼
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 def Product(x,y): 8 return x * ydome
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 import logging as log 8 9 from Log import dome 10 11 def GetLogger(): 12 logger = log.getLogger() 13 14 fh = log.FileHandler("log.txt") 15 16 logger.addHandler(fh) 17 18 return logger 19 20 print(dome.Product(5,6))logger
2>.calcuate 包中的源代碼
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 8 def Add(x,y): 9 return x + ysc_cal
3>.bin 包中的源代碼
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 import os,sys 8 9 10 AbsolutePath = os.path.abspath(__file__) #將相對路徑轉換成絕對路徑 11 12 SuperiorCatalogue = os.path.dirname(AbsolutePath) #相對路徑的上級路徑 13 14 BaseDir = os.path.dirname(SuperiorCatalogue) #在“SuperiorCatalogue”的基礎上在脫掉一層路徑,得到我們想要的路徑。 15 16 sys.path.insert(0,BaseDir) #將我們取出來的路徑加入到Python的命名空間去,並將該目錄插入在第一個位置中。 17 18 from Log import logger 19 20 from calcuate import sc_cal 21 22 23 obj = logger.GetLogger() 24 25 obj.error("This yinzhengjie‘s test error !") 26 27 s1 = sc_cal.Add(100,200) 28 29 print(s1) 30 31 32 33 #以上代碼執行結果如下: 34 30 35 300
執行主程序代碼之後,會在執行的目錄中生成一個名稱為“log.txt”的文件。
1 This yinzhengjie‘s test error !log.txt
五.包的多級調用
目錄結構如上圖所示,以下是其中各個文件中的代碼。
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 import logging as log 8 9 10 def GetLogger(): 11 logger = log.getLogger() 12 13 fh = log.FileHandler("log.txt") 14 15 logger.addHandler(fh) 16 17 return loggerlogger
主程序代碼如下:
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 8 from Log.Loger import logger as log 9 10 obj = log.GetLogger() 11 12 obj.error("This yinzhengjie‘s test error !")
執行主程序代碼之後,會在執行的目錄中生成一個名稱為“log.txt”的文件。
1 This yinzhengjie‘s test error !log.txt
六.__name__的應用
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 print("This is Test Page !") 8 9 def foo(): 10 print("ok") 11 12 13 14 if __name__=="__main__": # 推薦使用這種方式調試代碼,只有執行當前模塊的人才會執行以下代碼,如果是別人調用該模塊,以下的代碼是不會被執行的! 15 foo() 16 17 print(__name__) 18 19 20 21 22 23 24 #以上代碼執行結果如下: 25 This is Test Page ! 26 ok 27 __main__
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:[email protected] 6 7 8 import name 9 10 11 12 #以上代碼執行結果如下: 13 This is Test Page ! 14 name
Python中包(package)的調用方式