每乙個以副檔名.py結尾的源**檔案都是乙個模組。
模組名同樣也是乙個識別符號,需要符合識別符號的命名規則:由數字、字母和下劃線組成,而且開頭不能是數字。
模組就好比是工具包,模組中定義的全域性變數、函式、類,都是提供外界使用的工具。
要想使用模組中的工具,首先要匯入這個模組。
有兩種方式:import匯入、from…import匯入
(1)import 匯入。會一次性把模組中的所有工具全部匯入;匯入之後,通過模組名.使用模組中的工具----全域性變數、類、函式。
注意:每個匯入應該獨佔一行。
import 模組名1
import 模組名2
例子:xb_01,xb_02 均為編寫好的.py程式
xb_01.py:
# 全域性變數
title =
"模組1"
# 函式
def say_hello()
:print
("我是 %s"
% title)
# 類class dog
(object)
: pass
xb_02.py:
# 全域性變數
title =
"模組2"
# 函式
def say_hello()
:print
("我是 %s"
% title)
# 類class cat
(object)
: pass
在主程式中呼叫這兩個模組:
import xb_01
import xb_02
xb_01.
say_hello()
xb_02.
say_hello()
dog = xb_01.
dog(
)print
(dog)
cat = xb_02.
cat(
)print
(cat)
輸出:我是 模組1
我是 模組2
>
>
注意:如果模組的名字太長,可以使用as指定模組的別名。模組的別名應該符合大駝峰命名法(每個單詞的首字母大寫,單詞之間沒有下劃線)。
import 模組名1 as 模組別名
例子:
import xb_01 as dogmoudle
import xb_02 as catmoudle
dogmoudle.
say_hello()
catmoudle.
say_hello
()
(2)from…import 匯入。從乙個模組中,匯入部分工具。匯入後,不需要通過模組名.,可以 直接使用模組中的工具–全域性變數、函式、類。
from 模組名1 import 工具名
例子:
from xb_01 import dog
from xb_02 import say_hello
dog =
dog(
)print
(dog)
say_hello
()
注意:
如果兩個模組,存在同名函式,那麼後匯入模組的函式,會覆蓋掉先導入的函式。一旦發生衝突,可以使用 as 給其中乙個工具起別名。
from xb_01 import say_hello
from xb_02 import say_hello as module2_say_hello
say_hello()
module2_say_hello
()
from 模組名1 from *
直譯器在匯入模組時,會首先搜尋當前目錄,沒有找到再去搜尋系統目錄。所以,給檔案起名時,不要和系統的模組檔案重名。
問題:在匯入檔案時,檔案中的所有沒有縮排的**都會被執行一遍!但是,開發人員通常會在模組的下方增加一些測試**希望僅在模組內使用,而被匯入到其他模組中不需要執行。
解決:採用__name__判斷,把測試**放到判斷句的下面。這樣,測試**只有在執行該程式時會被執行,在匯入到其他程式中的時候,測試**並不會被執行。
原理:__name__是乙個內建屬性,記錄著乙個字串。如果是當前執行的程式,__name__就是__main__的;如果是被其他檔案匯入的,__name__就是模組名。
例子:在模組中,
def say_hello()
:print
("我是 hello"
)if __name__ ==
"__main__"
:say_hello
()
因此,為保證**的可讀性,方便被匯入到其他檔案,正確的程式格式應該如下所示:
# 匯入模組
# 定義全域性變數
# 定義類
# 定義函式
# 在**的最下方
def main()
: pass
# 根據 __name__判斷是否執行下方**
if __name ==
"__main__"
:main
()
包是乙個包含多個模組的目錄。
目錄下有乙個特殊的檔案__ init__.py
包名的命名方式和變數名一致,包含小寫字母、數字、下劃線(不以數字開頭) 。
好處:使用import 包名可以一次性匯入包中所有的模組。
例子:(1)建立乙個包xb_message:
方式一:新建目錄(directory),在該目錄中手動新建乙個空白的__init__的py檔案。
方式二:直接新建 python package。會自動生成乙個空白的__init__檔案。
(2)新建兩個檔案,send_message和receive_message檔案。在第乙個檔案定義send函式,第二個檔案定義receive函式。
def send
(text)
:print
("正在傳送%s..."
% text)
def receive()
:return
"這是來自10086的簡訊"
(3)配置__init__檔案:指定對外界提供的模組列表
from . import send_message
from . import receive_message
(4)在外界呼叫包。
import xb_message # 匯入包
xb_message.send_message.
send
("三號高地,收到請回答!"
) # 包名.模組名.函式名
txt = xb_message.receive_message.
receive()
print
(txt)
Python學習筆記 物件導向
物件導向 oop 基本概念 物件導向程式設計 object oriented programming簡寫 oop 1 物件導向基本概念 之前的學習程式設計方式就是面向過程的 面向過程和物件導向,是兩種不同的程式設計方式 對比面向過程的特點,可以更好的了解什麼是物件導向 2 過程和函式 科普 過程是最...
python 物件導向 多型(八)
案例 人有中國人,英國人,他們都要講話 父類class person metaclass abc.abcmeta abc.abstractmethod裝飾器後嚴格控制子類必須實現這個方法 指定是抽象方法 abc.abstractmethod def talk self pass 子類class ch...
物件導向程式設計 python 學習筆記
物件導向程式設計 object oriented programming,簡稱oop,是一種程式設計思想。oop把物件作為程式的基本單元,乙個物件包含了資料和運算元據的函式。面向過程的程式設計把電腦程式視為一系列的命令集合,即一組函式的順序執行。為了簡化程式設計,面向過程把函式繼續切分為子函式,即把...