1. 程式人生 > >Python中包(package)的調用方式

Python中包(package)的調用方式

inf none 普通 bfd 是否 open usr -a pack

                     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 + y
sc_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 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
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 yinzhengjies 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 + y
sc_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 * y
dome 技術分享圖片
 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 yinzhengjies test error !
2 This yinzhengjies 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 * y
dome 技術分享圖片
 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 + y
sc_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 yinzhengjies 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 logger
logger

  主程序代碼如下:

 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 yinzhengjies 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)的調用方式