通俗一點地解釋
Pycharm創(chuàng)建普通的directory和package時都是在硬盤上建立一個文件夾。但是建package時會在這個文件夾中自動地生成一個空的__init__.py文件朴皆。
Python的一個包是一個帶有特殊文件 __init__.py 的目錄撑蚌。__init__.py 文件定義了包的屬性和方法熬芜。其實它可以什么也不定義;可以只是一個空文件,但是必須存在暖庄。如果 __init__.py 不存在弊予,這個目錄就僅僅是一個目錄祥楣,而不是一個包,它就不能被導入或者包含其它的模塊和嵌套包汉柒。
來點高大上
對于Python而言误褪,有一點是要認識明確的,python作為一個相對而言輕量級的碾褂,易用的腳本語言(當然其功能并不僅限于此兽间,在此只是討論該特點),隨著程序的增長正塌,可能想要把它分成幾個文件嘀略,以便邏輯更加清晰,更好維護乓诽,亦或想要在幾個程序中均使用某個函數(shù)帜羊,而不必將其復制粘貼到所有程序中。
為了支持這一點鸠天,Python有一種方法將定義函數(shù)放在一個文件中讼育,并在腳本中使用它們,這樣的文件叫做模塊稠集,一個模塊中的定義可以被導入到其他模塊奶段,或者主模塊中。
簡單來說在python中模塊就是指一個py文件巍杈,如果我們將所有相關(guān)的代碼都放在一個py文件中忧饭,則該py文件既是程序由是模塊,但是程序和模塊的設(shè)計目的是不同的筷畦,程序的目的是為了運行词裤,而模塊的目的是為了其他程序進行引用刺洒。
Directory:
Dictionary在pycharm中就是一個文件夾,放置資源文件吼砂,對應于在進行JavaWeb開發(fā)時用于放置css/js文件的目錄逆航,或者說在進行物體識別時,用來存儲背景圖像的文件夾渔肩。該文件夾其中并不包含_ _ init.py_ _文件
Package(Python中將一個.py文件看作一個module):
對于Python package 文件夾而言因俐,與Dictionary不同之處在于其會自動創(chuàng)建_ _ init.py_ _文件。
簡單的說周偎,python package就是一個目錄抹剩,其中包括一組模塊和一個_ _ init.py_ _文件。目錄下具有init.py文件蓉坎,這樣可以通過from…import的方式進行.py文件的導入澳眷。
例子
如下通過幾個例子進行說明,如何進行module的導入蛉艾,目錄結(jié)構(gòu)如下:
假設(shè)file這個package是一個開源包钳踊,里面有一些現(xiàn)有的我們需要在one文件中使用的方法。
hello.py代碼:
class package():
? ? ? def Foo(self):
? ? ? ? ? ? print "hello world"class two():
? ??? def Foo2(self):
? ? ? ? ? ? print "hello Python"def write(str):
?print str
對于module的導入勿侯,個人認為有如下方式:
(1)形式:import module(將整個模塊全部導入)
import file.hello
o = file.hello.package() M氐桑可能同時import多個module,因此使用的方法需要說明是哪個module中 的方法
o.Foo()
file.hello.write("hello")#說明是file.hello這個module中的write方法
(2)from module import 需要用的類名或方法名
from file.hello import package,write
o = package() #已經(jīng)聲明了導入的package是file.hello這個module的助琐,因此不必再使用前綴
o.Foo()
write("hello")
(3)from package(包) import module
from image import hello
hello.write("hello")
o = hello.package()? #同樣可能導入了多個模塊祭埂,因此需要注明是哪個模塊的
o.Foo()
需要注意的是,可以從package中進行import弓柱,但是對directory無法進行import沟堡,想導入某個文件夾中的.py文件,必須有init.py文件矢空,在module導入之后就可以使用module中的類航罗,函數(shù),變量屁药。
注:以上內(nèi)容皆來自于網(wǎng)絡(luò)粥血,便于學習整理成冊!
點個贊那吧酿箭!