Python模塊調用方式詳解


                 Python模塊調用方式詳解

                                          作者:尹正傑

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

 

 

  模塊,用一砣代碼實現了某個功能的代碼集合。 類似於函數式編程和面向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對於一個復雜的功能來,可能需要多個函數才能完成(函數又可以在不同的.py文件中),n個 .py 文件組成的代碼集合就稱為模塊。接下來就讓我們一起學習一下Python中模塊調用方式吧。

 

一.什么是模塊

  在計算機程序的開發過程中,隨着程序代碼, 在一個文件里代碼就會越來越長,越來越不容易維護。為了編寫可維護的代碼,我們把很多函數分組,分別放在不同的文件里,使得每個文件包含的代碼就相對較少,很多編程語言都采用這種組織代碼的方式。在Python中,一個“*.py”文件就成為一個模塊(Module)

二.模塊的優點

  1>.提高了代碼的可維護性(可能性更好);

  2>.編寫代碼不必從零開始,當一個模塊編寫完畢,就可以被其他地方引用,也經常引用其他模塊,包括Python內置的模塊和來自第三方的模塊.所以,模塊分為三類:

    a>.Python標准庫

    b>.第三方模塊

    c>.應用程序自定義模塊

  3>.使用模塊還可以避免函數名和變量名沖突。相同名字的函數和變量完全可以分別在不同的模塊中,因此,我們自己在編寫模塊時,不必要考慮名字會與其他模塊沖突。但是也要注意,盡量不要與內置函數名字沖突。

 

三.Python導入模塊的方式

 1 #!/usr/bin/env python3
 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:y1053419035@qq.com
 6 #方法一:
 7 '''
 8     import modname
 9     提示:這種導入方法適合用在導入內置模塊(如:os,sys.time等等)或者導入第三方庫時使用!
10 '''
11 #用法展示
12 import sys
13 #方法2
14 '''
15     from modname import funcname   & from modname import *
16     提示:這種用適合用在包文件的導入,相對導入,絕對導入就是用他實現的!不建議使用from modname import *   這種方法導入!
17 '''
18 #用法展示:
19 from os import chown,chmod
20 #方法3
21 '''
22     mymodule = __import__ (’module_name’)
23 '''
24 #友情提示
25 '''
26     不主張從一個包或模塊中用import * 導入所有模塊,因為這樣的通常會導致可讀性很差。
27     from Package import specific_submodule的用法並沒有錯,實際上這還是推薦的用法,除非導入的模塊需要使用其它包中的同名子模塊(the importing module needs to use submodules with the same name from different packages). 
28          綜上所述,一般情況應該使用import , 但有幾個例外 
29         1>.module文檔告訴你要用from-import的 
30         2>.導入一個包組件。需要一個包里面的某個子模塊,一般用from A.b import c比import A.b.c 更方便 且不會冒混淆的危險.
31 '''

 

四.import 語句

 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:y1053419035@qq.com
 6 
 7 
 8 x = 2018
 9 
10 
11 def get():
12     print(x)
13 
14 def set():
15     global x
16     x=100
module1.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:y1053419035@qq.com
 6 
 7 import module1
 8 
 9 import module1          #第二次調用,不會再次執行該模塊,只是完成了一次引用。一個模塊可以在當前位置import多次,但只有第一次
10 # 導入會執行源文件內的代碼,原因是:第一次導入就會將模塊包含的內容統統加載到內存了,以后在當前文件位置的導入都是指向內存中已有的模塊。
11 
12 import os,sys,time          #我們可以同時導入多個模塊,不建議這樣干,可讀性差!
13 
14 x = "yinzhengjie"
15 
16 print(module1.x)
17 
18 module1.get()
19 
20 module1.set()
21 
22 module1.get()
23 
24 print(x)
25 
26 
27 
28 
29 #以上代碼執行結果如下:
30 2018
31 2018
32 100
33 yinzhengjie

 

五.導入模塊是起別名

 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:y1053419035@qq.com
 6 
 7 
 8 import logging as log
 9 
10 log.error("This yinzhengjie's test error !")
11 
12 
13 
14 
15 #以上代碼執行結果如下:
16 ERROR:root:This yinzhengjie's test error !

 

六.from…import 語句 

 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:y1053419035@qq.com
 6 
 7 
 8 x = 2018
 9 
10 
11 def get():
12     print(x)
13 
14 def set():
15     global x
16     x=100
module1.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:y1053419035@qq.com
 6 
 7 
 8 # from module1 import x,get,set           #只導入module1模塊中的部分變量。推薦使用這種方法。
 9 
10 from module1 import *                   #將module1模塊中所有的數據都導入到內存,不建議這樣干!from…import* 語句提供了
11 # 一個簡單的方法來導入一個模塊中的所有項目。然而這種聲明不該被過多地使用。大多數情況, Python程序員不使用這種方法,
12 # 因為引入的其它來源的命名,很可能覆蓋了已有的定義。它和“import module1”調用方式是不同的!
13 
14 
15 print(x)
16 
17 get()
18 
19 set()
20 
21 get()
22 
23 def get():
24     print("yinzhengjie")
25 
26 get()
27 
28 
29 
30 
31 #以上代碼執行結果如下:
32 2018
33 2018
34 100
35 yinzhengjie

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM