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