摘要:所以,學(xué)會用好就成為我們學(xué)習(xí)需要重點了解的第一個內(nèi)容。模塊的作用,就是可以把一組相關(guān)的功能,集成在一個文件中,方便在其它應(yīng)用中通過引入來調(diào)用。為避免這種相互覆蓋而出錯的情況,時還是盡量使用模塊名的方式來訪問,當然可以用別名。
前文有敘,Python是開放型社群化的開發(fā)語言,所以我們在編寫Python程序時,不可避免的需要用到別人已經(jīng)做好的、成型的類庫,這些類庫可能是圖形處理、可能是網(wǎng)絡(luò)通訊、可能是數(shù)據(jù)分析等等,反正不需要自己來重新從最底層開始再寫一遍,這樣就需要用到import 來引入外來的拓展包。
能否找到更多的第三方庫、拓展包,也因此成為評判一個編程語言的開發(fā)社區(qū)是否活躍、是否易用的一個標志。所以,學(xué)會用好import就成為我們學(xué)習(xí)Python需要重點了解的第一個內(nèi)容。
Python能通過import 引入的,有模塊(module)和包(package)兩種。
模塊(module)的作用,就是可以把一組相關(guān)的功能,集成在一個 .py 文件中,方便在其它應(yīng)用中通過 import 引入來調(diào)用。比如跟時間相關(guān)的操作,都集成在一個 module 中,使用時這樣來操作。
#引入time模塊 import time #調(diào)用time模塊的sleep()方法 time.sleep(1)
不同人寫的模塊(module)有可能會重名,例如A寫了個time.py模塊,B也寫了個time.py,他們中間各有一個方法非常好用,對于C來說,就容易混淆了。因此有了包(package)的概念。
包(package)是在module的外面加了一層,如
#引入A的time模塊 import A.time #引入B的time模塊 import B.time #調(diào)用A的time模塊的sleep()方法 A.time.sleep(1) #調(diào)用B的time模塊的方法 B.time.setTime(0)
就相當于JAVA中的PACKAGE。物理上體現(xiàn)在:模塊(module)可以放在同一目錄下,而包(package)一般放在以包名命名的文件夾中。下面以例子來解釋。
新建 lmModule.py,內(nèi)容如下
print("From lmModule.py")
運行一下,可以看到正常打印
From lmModule.py
在同一目錄中再新建一個main01.py,內(nèi)容如下
import lmModule print("From main01.py")
運行一下,可以看到打印出來:
From lmModule.py From main01.py
由此可見,import實際上是把要導(dǎo)入的程序預(yù)先加載在了主程序的前部,兩者的內(nèi)容都得到了執(zhí)行。
修改一下lmModule.py的內(nèi)容,添加一個變量和一個方法:
print("From lmModule.py") lmModule_var = "LmModule Var" def lmModule_method(): print("From lmModule.py lmModule_method")
再修改一下main01.py,來嘗試調(diào)用一下模塊的變量和方法:
import lmModule print("From main01.py") print(lmModule.lmModule_var) lmModule.lmModule_method()
運行發(fā)現(xiàn),使用“模塊名+.”的方式,可以很好的實現(xiàn)調(diào)用,運行結(jié)果如下:
From lmModule.py From main01.py LmModule Var From lmModule.py lmModule_method
再次修改main01.py,嘗試不同的import方法:
from lmModule import lmModule_var, lmModule_method print("From main01.py") print(lmModule_var) lmModule_method()
用“from 模塊名 import 部分變量或方法”這種方式,可以從模塊中引入特定的的變量或方法,這些變量或方法可以直接使用,就像程序自己定義的一樣,再不需要用“模塊名+.”來訪問。如果需要引入所有的變量或方法,可以改寫成通配符*,執(zhí)行效果一樣。
from lmModule import * print("From main01.py") print(lmModule_var) lmModule_method()
接下來,新建一個目錄dir,在dir下面新建一個“dirModule.py”,內(nèi)容如下:
print("From dir dirModule")
修改main01.py,內(nèi)容如下,以引入dir目錄下的dirModule模塊:
from lmModule import * from dir.dirModule import * print("From main01.py") print(lmModule_var) lmModule_method()
執(zhí)行發(fā)現(xiàn),把模塊定義在下級目錄中,也是可以順利import到的,執(zhí)行效果如下
From lmModule.py From dir dirModule From main01.py LmModule Var From lmModule.py lmModule_method
修改dirModule.py,在其中加入一個變量和一個方法的定義,內(nèi)容如下:
print("From dir dirModule") lmModule_var = "DirModule Var" def lmModule_method(): print("From dir dirModule.py lmModule_method")
執(zhí)行main01.py,可以看到,當先后import的兩個模塊中,有相同的變量定義或方法定義時,前面先import的會被后import的覆蓋,執(zhí)行效果如下:
From lmModule.py From dir dirModule From main01.py DirModule Var From dir dirModule.py lmModule_method
如果修改main01.py,交換import的順序,可以看到,執(zhí)行的結(jié)果不同,先import的會被后import的覆蓋,你可以自己試試。
為避免這種相互覆蓋而出錯的情況,import 時還是盡量使用“模塊名+.”的方式來訪問,當然可以用別名。修改main01.py如下:
import dir.dirModule as d import lmModule as h print("From main01.py") print(h.lmModule_var) d.lmModule_method()
執(zhí)行效果如下:
From dir dirModule From lmModule.py From main01.py LmModule Var From dir dirModule.py lmModule_method
在dir目錄下新建一個“secModule.py"文件,內(nèi)容如下:
print("From dir secModule") secModule_var = "SecModule Var"
修改main01.py,增加對于secModule模塊的調(diào)用,內(nèi)容如下:
import dir.dirModule as d import dir.secModule import lmModule as h print("From main01.py") print(h.lmModule_var) d.lmModule_method() print(dir.secModule.secModule_var)
執(zhí)行一下,可以看到secModule模塊的內(nèi)容正常被引入了,secModule模塊中定義的變量也可以使用。
From dir dirModule From dir secModule From lmModule.py From main01.py LmModule Var From dir dirModule.py lmModule_method SecModule Var
好,那么如果想一次性導(dǎo)入dir目錄下的多個文件,可行嗎,經(jīng)測試 import dir.* 是不好使的;import dir 更是不好使。那怎么辦呢?
該包(package)上場了!
在dir目錄下新建“__init__.py”,內(nèi)容如下:
from . import secModule from . import dirModule
有了這個“__init__.py”,就把dir由一個目錄,變成了一個包(package)。Python只要在目錄下找到這個文件,就會按package來處理,下面我們修改一下main01.py的內(nèi)容:
import dir import lmModule as h print("From main01.py") print(h.lmModule_var) dir.dirModule.lmModule_method() print(dir.secModule.secModule_var)
執(zhí)行一下,可見通過import一個包dir,可以將包中的所在module都引入進來。執(zhí)行效果如下:
From dir secModule From dir dirModule From lmModule.py From main01.py LmModule Var From dir dirModule.py lmModule_method SecModule Var
當然__init__.py中也可以定義變量和方法。而且,如果“__init__.py”中包含了變量“__all__”,那么將只有“__all__”中所指定的變量或方法能被外部訪問!“__all__”中所指定的變量或方法相當于JAVA中的public。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42943.html
摘要:也就是說明這個參數(shù)除了表示圓的半徑面,其正負性還定義了畫圓的方向。入門篇中有個小彩蛋,也就是可以修改的指針外形。通過初始化出多只新,可以同時在一個界面上以不同的繪圖。下面給出一段繪制實時時鐘的代碼,重點部分我已給出注釋。 到目前為止我們通過turtle庫了解了Python的基本語法,包括順序與循環(huán)、函數(shù)的調(diào)用與方法的定義、列表與簡單的數(shù)學(xué)運算等;也學(xué)習(xí)了用turtle庫繪圖的基本用...
摘要:現(xiàn)實生活中,有很多圖形是非常有規(guī)律性的,這樣的圖形如果使用遞歸算法來實現(xiàn),程序就會非常簡潔,運行效果也會很好。下面我們來用畫一棵樹,感受一下中的遞歸算法和的克隆功能。 前兩篇文章基本涵蓋了turtle的大部分功能,同時也借由對turtle功能的展示,厘清了Python的一些語法特點,以利于新手入門。但是短短幾個例子,闡述得還是有限,這里再展開兩個知識點,一方面對turtle做個補遺...
摘要:比如把上面畫正方形的例子稍做變化重復(fù)執(zhí)行次畫正方形開始畫正方形結(jié)束右轉(zhuǎn)度執(zhí)行后,可以看到,畫出一個非常規(guī)整漂亮的組合圖案。 turtle圖形庫源于1966年誕生的Logo語言,是入門Python的有趣工具。因其簡單便捷的圖形化方法、和立即反饋式的繪畫效果,成為眾多編程入門者的首選。相對于大多數(shù)入門教材中枯燥的語法學(xué)習(xí),和函數(shù)、方法的演練來說,turtle的趣味性顯得別具一格、極富效...
摘要:跟等微軟一家所開發(fā)的編程語言不同,是典型的開放式的社群型開發(fā)語言,也就是說由來自全球各個角落的人共同貢獻創(chuàng)造而成。 Python跟VB、VC等微軟一家所開發(fā)的編程語言不同,是典型的開放式的社群型開發(fā)語言,也就是說由來自全球各個角落的人共同貢獻、創(chuàng)造而成。所以,要學(xué)習(xí)Python語言,就不要想著點擊個EXE文件,安裝完成就馬上就可以開始編碼、查看效果了。Python的核心代碼由一部分人開...
摘要:以下這些項目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當你每個步驟都能做到很優(yōu)秀的時候,你應(yīng)該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...
閱讀 2807·2021-11-23 09:51
閱讀 3564·2021-10-08 10:17
閱讀 1298·2021-10-08 10:05
閱讀 1357·2021-09-28 09:36
閱讀 1876·2021-09-13 10:30
閱讀 2219·2021-08-17 10:12
閱讀 1704·2019-08-30 15:54
閱讀 2031·2019-08-30 15:53