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
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
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