版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第
2
章
Python基礎(chǔ)XXXX
大學(xué)XX
學(xué)院XXX
教授2學(xué)習(xí)目標(biāo):掌握Python
代碼格式與風(fēng)格掌握Python
標(biāo)識符與關(guān)鍵字掌握Python
常量、變量與解釋器命名空間熟悉內(nèi)置函數(shù)、類與對象的概念及應(yīng)用熟悉模塊與文件對象的概念及應(yīng)用思政內(nèi)涵:通過學(xué)習(xí)和遵守命名規(guī)則與編程規(guī)范,廣大學(xué)子要養(yǎng)成遵守規(guī)則,工作嚴(yán)謹(jǐn)、認(rèn)真負(fù)責(zé)的職業(yè)精神。學(xué)習(xí)目標(biāo):32.1
基礎(chǔ)語法代碼格式良好的代碼格式可提升代碼的可讀性。Python
代碼的格式是Python
語法的一部分,本節(jié)從縮進(jìn)、換行和注釋
3
個方面對Python
代碼格式進(jìn)行講解??s進(jìn)一般使用“縮進(jìn)”(即一行代碼之前的空白區(qū)域)確定
Python
代碼之間的邏輯關(guān)系和層次關(guān)系。Python
代碼的縮進(jìn)可以通過
Tab
鍵或空格鍵控制,但不允許混合使用
Tab
鍵和空格鍵。輸入空格是Python
3
首選的縮進(jìn)方法,一般使用
4
個空格表示一級縮進(jìn)。示例代碼如程序段P2.1
所示。P2.1
代碼縮進(jìn)if
True:4print("True")else:print("False")運行代碼,輸出結(jié)果如下。True代碼縮進(jìn)量的不同會導(dǎo)致代碼語義的改變,Python
語言要求同一代碼塊的每行代碼必須具有相同的縮進(jìn)量。2.
換行Python
官方建議每行代碼不超過
79
個字符,若代碼過長則應(yīng)該換行。Python
會將圓括號、方括號和花括號中的行進(jìn)行隱式連接,可以根據(jù)這個特點在語句外側(cè)添加一對圓括號,實現(xiàn)語句的換行,示例代碼如程序段P2.2
所示。學(xué)習(xí)目標(biāo):5P2.2
代碼換行print(['a','b',
'c','d',
'e'])運行代碼,輸出結(jié)果如下。a,b,c,d,e3.
注釋1)
單行注釋單行注釋常以#開頭。單行注釋可以作為單獨的一行放在被注釋代碼行之上,也可以放在語句或表達(dá)式之后,示例代碼如程序段P2.3
所示。P2.3
單行注釋#
使用print
輸出字符串Hello
World!print("Hello
World!")6print("Hello
Python!") #
使用print
輸出字符串Hello
Python!運行代碼,輸出結(jié)果如下。Hello
World!Hello
Python!2)
多行注釋多行注釋指的是一次性注釋程序中的多行內(nèi)容(包含一行)。Python
使用
3個連續(xù)的單引號'''或
3
個連續(xù)的雙引號"""注釋多行內(nèi)容,多行注釋通常用來為Python
文件、模塊、類或函數(shù)等添加版權(quán)或功能描述信息。具體格式如程序段P2.4
所示。P2.4
多行注釋'''使用
3
個單引號分別作為注釋的開頭和結(jié)尾學(xué)習(xí)目標(biāo):7可一次性注釋多行內(nèi)容這里面的內(nèi)容全部都是注釋內(nèi)容'''標(biāo)識符與關(guān)鍵字標(biāo)識符標(biāo)識符就是對變量、常量、函數(shù)、類等對象起的名字。Python
中的標(biāo)識符需要遵守一定的命名規(guī)則,具體如下。在Python
中,標(biāo)識符由字母、數(shù)字、下畫線組成。所有標(biāo)識符可以包括英文、數(shù)字及下畫線,但不能以數(shù)字開頭。(3)
Python
中的標(biāo)識符是區(qū)分大小寫的。(4)
以下畫線開頭的標(biāo)識符是有特殊意義的。例如,以雙下畫線開頭的(
foo)代表類的私有成員,不能直接從外部調(diào)用,需通過類中的其他方法調(diào)用;8以雙下畫線開頭和結(jié)尾的
(
foo
)代表Python
中特殊方法專用的標(biāo)識。(5)
不允許使用Python
預(yù)定義標(biāo)識符名(關(guān)鍵字)作為自定義標(biāo)識符名。合法的標(biāo)識符示例如下。namename2name_3不合法的標(biāo)識符示例如下。4wordtry$money#
不能以數(shù)字開頭#
try
是關(guān)鍵字,不能作為自定義標(biāo)識符#
不能包含特殊字符學(xué)習(xí)目標(biāo):9在Python
中,建議按照以下方式命名標(biāo)識符。見名知意:標(biāo)識符應(yīng)有意義,盡量做到看一眼便知道標(biāo)識符的含義。例如,使用name
表示姓名;使用student
表示學(xué)生。命名規(guī)范:常量名應(yīng)使用大寫的單個單詞或由下畫線連接的多個單詞命名(如ORDER_LIST_LIMIT);模塊名、函數(shù)名應(yīng)使用小寫的單個單詞或由下畫線連接的多個單詞命名(如low_with_under);類名應(yīng)使用以大寫字母開頭的單個或多個單詞命名(如Cat、CapWorld)。2.
關(guān)鍵字關(guān)鍵字是Python
編程語言預(yù)定義的保留字,不能用于其他目的。Python
3中一共定義了
35
個關(guān)鍵字,這些關(guān)鍵字都存儲在keyword
模塊的變量kwlist中,通過查看變量
kwlist
可查看Python
中的關(guān)鍵字,示例如程序段
P2.5
所示。P2.5
查看關(guān)鍵字10#
導(dǎo)入keyword
模塊import
keywordprint(keyword.kwlist)輸出結(jié)果如下。['False','None','True','and','as','assert','async','await','break','class','continue','def','del',
'elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or',
'pass','raise','return','try','while','with',
'yield']Python
中的關(guān)鍵字具有不同的作用,通過“help”(關(guān)鍵字)命令可查看關(guān)鍵字的聲明。掌握關(guān)鍵字的含義有助于理解程序的功能。Python
關(guān)鍵字及含義如表
2-1
所示。學(xué)習(xí)目標(biāo):11表
2-1Python
關(guān)鍵字及含義關(guān)鍵字含義True/False邏輯真/假None空值and/or/not邏輯與、或、非運算符as在import、except
或with
語句中給對象取別名assert斷言,用來確認(rèn)某個條件必須滿足,幫助調(diào)試程序async定義協(xié)程await用于掛起阻塞的過程break用在循環(huán)結(jié)構(gòu)中,結(jié)束break
所在層次的循環(huán)class定義類continue用在循環(huán)結(jié)構(gòu)中,結(jié)束本次循環(huán)12def定義函數(shù)del刪除對象或其成員elif用在選擇結(jié)構(gòu)中,是else
if
的縮寫except用在異常處理結(jié)構(gòu)中,捕獲指定類型的異常else用在選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)或異常處理結(jié)構(gòu)中finally用在異常處理結(jié)構(gòu)中,表示無論是否發(fā)生異常都會執(zhí)行后面的代碼forfor
循環(huán)from指明從哪個模塊中導(dǎo)入什么對象,還可以與yield
構(gòu)成表達(dá)式global定義或聲明全局變量if用在選擇結(jié)構(gòu)中,對條件進(jìn)行判斷import導(dǎo)入模塊或模塊中的對象in成員測試學(xué)習(xí)目標(biāo):13is同一性測試lambda定義匿名函數(shù)nonlocal聲明非局部變量pass空語句,執(zhí)行該語句時什么都不做,用作占位符raise顯示拋出異常return用在函數(shù)中,返回函數(shù)值,如果沒有指定返回值,則返回空值
Nonetry用在異常處理結(jié)構(gòu)中,限定可能發(fā)生異常的代碼塊whilewhile
循環(huán)結(jié)構(gòu)with上下文管理,具有自動打開、關(guān)閉等管理資源的功能yield在生成器函數(shù)中用來返回值142.1.3 變量與常量1.
變量變量來源于數(shù)學(xué),是計算機語言中能存儲計算結(jié)果或能表示值的抽象概念。程序在運行期間用到的數(shù)據(jù)會被保存在計算機的內(nèi)存單元中,為了方便存取內(nèi)存單元中的數(shù)據(jù),Python
使用標(biāo)識符來標(biāo)識不同的內(nèi)存單元,從而使標(biāo)識符與數(shù)據(jù)建立聯(lián)系,標(biāo)識內(nèi)存單元的標(biāo)識符名稱稱為變量名,Python
通過賦值運算符“=”將內(nèi)存單元中存儲的數(shù)值與變量名建立聯(lián)系,即定義變量,變量指向內(nèi)存單元。變量是對內(nèi)存單元數(shù)據(jù)、對象的引用。示例代碼如下。x=3 #
定義變量x
并賦值
3以上代碼定義的變量與內(nèi)存數(shù)據(jù)之間的關(guān)系如圖
2.1
所示。學(xué)習(xí)目標(biāo):15圖
2.1 變量與內(nèi)存數(shù)據(jù)之間的關(guān)系在編程語言中,將數(shù)據(jù)放入變量的過程稱為賦值(assignment)。Python
使用“=”作為賦值運算符,具體格式如下。name=
value16name
表示變量名;value
表示值,也就是要存儲的數(shù)據(jù)。注意,變量是標(biāo)識符的一種,因此不能隨便命名,要遵守Python
標(biāo)識符命名規(guī)則,還要避免與Python
內(nèi)置函數(shù)及Python
關(guān)鍵字重名。除了直接賦值以外,Python
還支持鏈?zhǔn)劫x值,即為多個變量同時賦相同的值,例如,x=y=z=100。此外,Python
還支持解包賦值,即將組合數(shù)據(jù)類型解包為相應(yīng)數(shù)量的變量賦值,例如,i,j,k=10,20,30;m,n=n,m。2.
常量程序在運行期間用到的不可變的數(shù)據(jù)(常量)也被保存在計算機的內(nèi)存單元中,Python
使用標(biāo)識符來標(biāo)識數(shù)據(jù)不可變的內(nèi)存單元,從而使標(biāo)識符與不可變的數(shù)據(jù)建立聯(lián)系,這樣的標(biāo)識符名稱稱為常量名。Python
中已經(jīng)定義了一些內(nèi)置常量,常用的主要有
3
個:True(表示真);False(表示假);None(表示空值)。當(dāng)然,在應(yīng)用編程中也可以自定義常量。學(xué)習(xí)目標(biāo):17
2.2
解釋器命名空間2.2.1
Python解釋器Python
解釋器也是一個程序,它解釋執(zhí)行
Python
代碼。解釋器由一個編譯器和一個虛擬機構(gòu)成,編譯器負(fù)責(zé)將源代碼轉(zhuǎn)換成字節(jié)碼文件,而虛擬機負(fù)責(zé)執(zhí)行字節(jié)碼。因此,解釋型語言也有編譯過程,只不過這個編譯過程并不是直接生成目標(biāo)代碼,而是生成中間代碼(字節(jié)碼),然后再通過虛擬機來逐行解釋執(zhí)行字節(jié)碼。Python
解釋器主要有以下
6
款。
Cpython:是用C
語言開發(fā)的官方默認(rèn)解釋器。Ipython:是基于CPython
之上的一個交互式解釋器。PyPy:采用JIT
技術(shù),對Python
代碼進(jìn)行動態(tài)編譯,可提高代碼的執(zhí)行18速度。
Jython:是運行在Java
平臺上的Python
解釋器,可直接編譯成Java
字節(jié)碼執(zhí)行。IronPython:是運行在微軟.Net
平臺上的
Python
解釋器,可直接編譯成.Net
的字節(jié)碼。
MicroPython:以微控制器為目標(biāo),針對嵌入式環(huán)境。Python
源程序執(zhí)行過程如下。執(zhí)行python
XX.py
后,將會啟動Python
解釋器。
Python
解釋器的編譯器會將.py
源文件編譯成字節(jié)碼,
生成PyCodeObject
字節(jié)碼對象存放在內(nèi)存中。
Python
解釋器的虛擬機將執(zhí)行內(nèi)存中的字節(jié)碼對象,并將其轉(zhuǎn)換為機器語言,虛擬機與操作系統(tǒng)交互,使機器語言在機器硬件上運行。運行結(jié)束后,Python
解釋器將PyCodeObject
寫入pyc
文件中。當(dāng)學(xué)習(xí)目標(biāo):19Python
程序第二次運行時,程序會先在硬盤中尋找
pyc
文件,如果找到,則直接載入,否則就重復(fù)上面的過程。2.2.2
命名空間在程序開發(fā)中,由不同的人員開發(fā)不同的模塊,難免會出現(xiàn)重名的情況。因此,解釋器對標(biāo)識符、變量等采用命名空間的方式來管理編譯對象的名稱。命名空間就是一些命名(名稱)的集合,它們與相應(yīng)的對象有對應(yīng)關(guān)系。多個命名空間相互獨立,允許不同命名空間中有相同的名稱。每個命名空間都是一個容器,容器內(nèi)的元素可以映射到對象的名稱,對象對應(yīng)的名稱分為變量名、函數(shù)名、類名、模塊名、屬性名。Python
的命名空間分為
3
類:內(nèi)置命名空間、全局命令空間和局部命名空間。201.
內(nèi)置命名空間內(nèi)置命名空間是運行Python
解釋器時,解釋器自動導(dǎo)入內(nèi)建模塊
builtins時創(chuàng)建的命名空間,包含的對象有內(nèi)置常量、內(nèi)置函數(shù)、內(nèi)置異常類等。內(nèi)置命名空間的對象在整個應(yīng)用程序中都可以使用。dir()函數(shù)命令不帶參數(shù),可返回解釋器當(dāng)前范圍內(nèi)的變量、對象的內(nèi)容列表。示例如圖
2.2
所示。圖
2.2解釋器當(dāng)前范圍及內(nèi)置命名空間的內(nèi)容學(xué)習(xí)目標(biāo):21從運行結(jié)果可知,獨立運行解釋器,解釋器當(dāng)前范圍名稱屬性“
name
”的值是“
main
”。解釋器把自動導(dǎo)入的內(nèi)置模塊構(gòu)建為對象“
builtins
”,其類型是“<module'builtins'(built-in)>”,其名稱屬
性“
builtins
.
name
”的值是“builtins”。內(nèi)置命名空間就是
builtins
指向的空間,解釋器會自動查找此空間。dir(
biltins
)命令返回了內(nèi)置命名空間的內(nèi)容。2.
全局命名空間全局命名空間是運行Python
解釋器時,解釋器執(zhí)行
Python
源文件時創(chuàng)建的命名空間,包含的對象有當(dāng)前文件中的函數(shù)、類、全局變量,以及導(dǎo)入的其他模塊的成員。Python
解釋器在啟動時會自動創(chuàng)建全局命名空間及解釋器當(dāng)前運行空間(或稱為解釋器主空間),并把運行的文件作為主模塊對象,其名稱屬性值是“
main
”,同時,自動導(dǎo)入內(nèi)建模塊
builtins,內(nèi)置命名空間的對象也完22全由應(yīng)用程序使用。單獨運行解釋器,用
globals()查看全局命名空間,如圖
2.3所示。圖
2.3 全局命名空間globals()命令返回了全局命名空間的成員及其值,用字典表示。編輯代碼文件,如圖
2.4
所示。學(xué)習(xí)目標(biāo):23圖
2.4 編輯Python
程序解釋器運行以上程序,用globals()查看全局命名空間,如圖
2.5
所示。24圖
2.5 解釋器執(zhí)行程序的全局命名空間從運行結(jié)果可知,全局命名空間中多了
file
:'D:/python/demo.py','x':25
,
'y':30
,
'z':55
這
4
個字典元素。解釋器把直接運行的文件作為主模塊,
file
中存儲的是主模塊的文件路徑。主模塊運行在解釋器主空間,也就是全局命名空間。主模塊的名稱屬性:“
name
=
'
main
'”。學(xué)習(xí)目標(biāo):25在當(dāng)前目錄下建立一個Python
文件,文件名為hello.py,文件中只寫一個語句:print("hello")。在
demo.py
文件中導(dǎo)入該文件,如圖
2.6
所示。圖
2.6 編輯程序解釋器執(zhí)行以上程序,用globals()查看全局命名空間,如圖
2.7
所示。26圖
2.7 導(dǎo)入模塊hello
后的全局命名空間可以看到,全局命名空間中多了導(dǎo)入的模塊'hello':<module'hello
fromD:\\python\hello.py'>。3.
局部命名空間學(xué)習(xí)目標(biāo):27局部命名空間是在定義類、調(diào)用函數(shù)時創(chuàng)建的,包含類的屬性、被調(diào)用函數(shù)參數(shù)和函數(shù)內(nèi)部定義的變量等。在函數(shù)內(nèi)部可以用
print(locals())打印輸出局部命名空間內(nèi)容,示例如圖
2.8
所示。圖
2.8局部命名空間28當(dāng)Python
需要使用變量時,會在上述命名空間中依次查找,順序為局部命名空間、全局命名空間、內(nèi)置命名空間。同一命名空間中的變量不能重名,但不同命名空間中的變量可以重名。
2.3 函數(shù)對象數(shù)學(xué)中經(jīng)常用到函數(shù),利用函數(shù)可以實現(xiàn)一定的運算功能。計算機程序設(shè)計中的函數(shù)與數(shù)學(xué)中的函數(shù)類似,計算機程序設(shè)計中的函數(shù)是指一段可以完成一定操作功能的代碼。程序在運行期間這段代碼會被保存在計算機的內(nèi)存單元中,為了標(biāo)識內(nèi)存單元中的這段代碼并方便重復(fù)使用,Python
使用標(biāo)識符加圓括號來標(biāo)識這段代碼,這個標(biāo)識符稱為函數(shù)名,圓括號中是這段代碼運行時需要的數(shù)據(jù),稱為函數(shù)參數(shù),函數(shù)執(zhí)行后通過函數(shù)名返回結(jié)果。函數(shù)的基本格式為“函數(shù)名(變量名)”,變量可以有多個。函數(shù)中定義的變量處于局部命名空間學(xué)習(xí)目標(biāo):29中。Python
中,函數(shù)也是對象,是一種具有功能行為的對象,函數(shù)分為內(nèi)置函數(shù)和自定義函數(shù)。2.3.1
內(nèi)置函數(shù)Python
中已經(jīng)定義了很多內(nèi)置函數(shù)。內(nèi)置函數(shù)就是
Python
提供的、可以直接使用的函數(shù),是解釋器啟動時自動導(dǎo)入內(nèi)建模塊加載的函數(shù)。常用的Python
內(nèi)置函數(shù)如表
2-2
所示。表
2-2 常用的Python
內(nèi)置函數(shù)abs()delattr()hash()memoryview()set()all()dict()help()min()setattr()any()dir()hex()next()slice()ascii()divmod()id()object()sorted()30bin()enumerate()input()oct()Staticmethod()bool()eval()int()open()str()(續(xù)表)breakpoint()exec()isinstance()ord()sum()bytearray()filter()issubclass()pow()super()bytes()float()iter()print()tuple()callable()format()len()property()type()chr()frozenset()list()range()vars()classmethod()getattr()locals()repr()zip()compile()globals()map()reversed()
import
()complex()hasattr()max()round()表
2-2
中共有
69
個內(nèi)置函數(shù),不同的
Python
版本,內(nèi)置函數(shù)的數(shù)量也不學(xué)習(xí)目標(biāo):31同。若要查看所使用的Python
版本的內(nèi)置函數(shù),則可以直接在Python
解釋器交互命令行輸入“dir(
builtins
)”,命令執(zhí)行后便會顯示所有的內(nèi)置常量和內(nèi)置函數(shù)。在命令行輸入“l(fā)en(dir(
builtins
))”,命令執(zhí)行后,輸出結(jié)果為159,說明當(dāng)前版本(Python
3.11)中有
159
個內(nèi)置函數(shù)和內(nèi)置常量,其中首字母大寫的是內(nèi)置常量,首字母小寫的是內(nèi)置函數(shù)。常用的內(nèi)置函數(shù)按功能可以分為以下
12
類。
查看類型:type()。幫助信息:help()。輸入輸出:input()、print()。進(jìn)制轉(zhuǎn)換:bin()、oct()、hex()。編碼轉(zhuǎn)換:ord()、chr()、ascii()。類型轉(zhuǎn)換:bool()、int()、float()、complex()。數(shù)學(xué)運算:abs()、pow()、max()、min()、sum()、round()、divmod()。32
高階函數(shù):map()、filter()、reduce()。序列操作:str()、list()、tuple()、set()、dict()、sort()、reverse()、slice()、range()、enumerate()、len()、all()、any()、zip()。
對象屬性:id()、dir()、hasattr()、getattr()、setattr()、delattr()、isinstance()。編譯執(zhí)行:repr()、compile()、eval()、exec()、callable()。命名空間:globals()、locals()。調(diào)用內(nèi)置函數(shù)的語法格式如下。函數(shù)名([參數(shù)名])例如,查看對象類型的函數(shù)type()的調(diào)用及運行結(jié)果如圖
2.9
所示。學(xué)習(xí)目標(biāo):33圖
2.9 查看對象類型運行結(jié)果說明abs
對象是內(nèi)建的函數(shù)或方法類型。若要了解內(nèi)置函數(shù)的功能和使用方法,則可以通過
Python
網(wǎng)站的Python
教程進(jìn)行學(xué)習(xí)。另一種簡便的學(xué)習(xí)方法是通過內(nèi)置的幫助函數(shù)查詢。例如,查詢dir()函數(shù)說明的示例代碼及輸出結(jié)果如圖
2.10
所示。另外,在交互模式下執(zhí)行help()命令,進(jìn)入幫助狀態(tài),直接輸入函數(shù)名即可獲得幫助信息,如圖
2.11
所示。34圖
2.10通過幫助函數(shù)查看dir()功能 圖
2.11 help()幫助命令模式內(nèi)置函數(shù)id()用于查看對象的地址;bin()函數(shù)可以將十進(jìn)制數(shù)值轉(zhuǎn)換為二進(jìn)制數(shù)值,oct()函數(shù)可以將十進(jìn)制數(shù)值轉(zhuǎn)換為八進(jìn)制數(shù)值,hex()函數(shù)可以將十進(jìn)制數(shù)值轉(zhuǎn)換為十六進(jìn)制數(shù)值;ord()函數(shù)可以將字符轉(zhuǎn)換為unicode
編碼,chr()函數(shù)可以將
unicode
編碼轉(zhuǎn)換為字符;ascii()函數(shù)在
ASCII
編碼范圍內(nèi)返回ASCII
字符,其他返回unicode
編碼。示例如圖
2.12
所示。內(nèi)置數(shù)學(xué)運算函數(shù)abs()、max()、min()、sum()、pow()、round()、divmod()學(xué)習(xí)目標(biāo):35的計算示例如圖
2.13
所示。圖
2.12對象地址、進(jìn)制轉(zhuǎn)換與編碼轉(zhuǎn)換函數(shù)的示例 圖
2.13 內(nèi)置數(shù)學(xué)運算函數(shù)的計算示例在后面的相關(guān)章節(jié)中會逐步介紹內(nèi)置函數(shù)的使用。2.3.2 自定義函數(shù)Python
編程除使用內(nèi)置函數(shù)外,還可以用關(guān)鍵字
def
定義函數(shù),語法格式如下。36def
函數(shù)名(參數(shù)名...):函數(shù)體[return 返回數(shù)據(jù)]返回語句是可選語句,只有當(dāng)函數(shù)有返回值時才需要。自定義函數(shù)的調(diào)用與內(nèi)置函數(shù)的調(diào)用相同,格式如下。函數(shù)名([參數(shù)名])例如,定義一個加法函數(shù),示例代碼如程序段P2.6
所示。P2.6
自定義加法函數(shù)與調(diào)用def add(x,y):
#
定義加法函數(shù),函數(shù)名為add,參數(shù)名為x
和yz=x+y #
函數(shù)體,執(zhí)行加法運算return
z
#
返回語句,返回加法運算結(jié)果print(add(10,20))
#
傳遞參數(shù)值
10
和
20
調(diào)用函數(shù),輸出計算結(jié)果學(xué)習(xí)目標(biāo):37運行代碼,輸出結(jié)果如下。30Python
的函數(shù)對象是一種功能強大的代碼封裝方式,本節(jié)僅介紹基本概念,在后面的函數(shù)編程中會詳細(xì)介紹。
2.4 類與對象在turtle
海龜對象繪圖程序中,我們已經(jīng)認(rèn)識了對象的概念。對象的概念最初來源于哲學(xué),指代現(xiàn)實世界中的一切事物,映射到
Python
世界中就是Python
的對象。Python
中內(nèi)置了很多對象。當(dāng)然,我們也可以自定義類型并創(chuàng)建對象。382.4.1 內(nèi)置類型與對象1.
實例對象Python
內(nèi)置的實例對象如下。數(shù)值對象:指具體數(shù)值,如整數(shù)值、實數(shù)值、復(fù)數(shù)值。常量對象:指Python
中定義的常數(shù),如None、True、False。內(nèi)置函數(shù)對象:指只有行為的對象,如abs()函數(shù)等。2.
類型對象Python
內(nèi)置的類型對象如下。(1)
object
類型對象,也稱為基類。(2)
基本數(shù)據(jù)類型對象:整數(shù)類型
int、浮點類型
float、復(fù)數(shù)類型
complex、布爾類型bool(只有兩個實例對象,即常量對象
True
和False)。學(xué)習(xí)目標(biāo):39(3)
組合數(shù)據(jù)類型對象:字符串
str、字節(jié)組
bytes、列表
list、元組
tuple、集合set、字典dict。3.
元類對象Python
的內(nèi)置元類對象只有一個,即type
元類對象。內(nèi)置的一些實例對象是類型對象的實例,例如,整數(shù)數(shù)據(jù)的類型對象是
int。實例對象就是一個個整數(shù),整數(shù)對象可進(jìn)行加、減等運算。查看內(nèi)置對象類型和其所在內(nèi)存地址的示例代碼及輸出結(jié)果如圖
2.14
所示。圖
2.14查看內(nèi)置對象
8
的類型和內(nèi)存地址40從圖
2.14
中可以看出,數(shù)字
8
是一個實例對象,類型為int,內(nèi)存地址為140710818014216。當(dāng)把它賦值給變量
x
時,變量
x
的類型也是int,其
id
值并沒有變,變量只是引用了它。通過
dir()函數(shù)可以查看一個對象的所有成員,例如,查看實例對象
8
和類型對象int
的所有成員的示例如圖
2.15
所示。圖
2.15實例對象
8
和類型對象int
的所有成員學(xué)習(xí)目標(biāo):41運行結(jié)果顯示了
8
和int
的屬性和方法,可以看到它們都有
add
()方法。兩個整數(shù)相加實際上調(diào)用了整數(shù)對象的
add
()方法來執(zhí)行加法運算,如圖2.16
所示。圖
2.16
整數(shù)對象的加法運算調(diào)用對象方法的語法格式是“對象名.方法名”,訪問對象屬性的語法格式是“對象名.屬性名”。例如,字符串(str)對象具有很多操作方法,如把字符串首字母轉(zhuǎn)換為大寫字母的方法等。調(diào)用字符串的操作方法的示例代碼如程序段P2.7所示。42P2.7
字符串對象方法的調(diào)用sr
=
'ahu
learning
python'
#
定義字符串#
capitalize()方法把字符串首字母轉(zhuǎn)換為大寫字母#
title()方法把每個單詞首字母轉(zhuǎn)換為大寫字母#
upper()方法把字符串中的每個字母都轉(zhuǎn)換為大寫字母sr1=
sr.capitalize()print(sr1)sr2=
sr.title()print(sr2)sr3=
sr.upper()print(sr3)運行代碼,輸出結(jié)果如下。Ahu
learning
python Ahu
Learning
Python AHULEARNING
PYTHON學(xué)習(xí)目標(biāo):432.4.2 自定義類1.
class
定義類在現(xiàn)實生活中,類是對具體事物對象的抽象描述。而在程序設(shè)計中,類是對象的模板,首先定義描述一類事物對象的類,然后由類來創(chuàng)建對象。Python中用關(guān)鍵字class
定義類,語法格式如下。class
類名([object]):屬性名def
方法名(self,[變量名]):方法體[return
返回數(shù)據(jù)]在定義類時,類名首字母要大寫,括號內(nèi)表示定義該類時繼承的父類名稱。44Python
規(guī)定,所有的類都會繼承
object
基類,如果定義的類只繼承
object
基類,則可以省略不寫。定義方法的參數(shù)self
表示調(diào)用該方法的對象自身。通過類創(chuàng)建對象的語法格式如下。變量名=類名()使用自定義類和對象的方式與使用內(nèi)置類型和對象的方式一樣。自定義類與對象的示例代碼如程序段P2.8
所示。P2.8
自定義類并創(chuàng)建使用對象#
類名Dog#
屬性color
被賦值為White#
方法名sayclass
Dog(object):color=
'White'def
say(self):print('wang,wang,wang....')return
'Hello'#
方法返回值Hello學(xué)習(xí)目標(biāo):45#
創(chuàng)建對象,對象名dog#
訪問對象屬性#
調(diào)用對象方法dog=
Dog()print(dog.color)res=dog.say()print(res)運行代碼,輸出結(jié)果如下。White wang,wang,wang.... HelloPython
的默認(rèn)編碼是UTF-8,支持中文,因此可以直接用中文作為類名、變量名。下面用中文給轎車建立一個簡單的類模型,示例代碼如程序段
P2.9
所示。P2.9
用中文描述轎車類并創(chuàng)建對象class
轎車:顏色
=
"紅色"46def
前進(jìn)(self):print("160
千米")轎車王
=
轎車()print(轎車王.顏色)轎車王.前進(jìn)()#
創(chuàng)建對象#
訪問屬性#
調(diào)用方法紅色運行代碼,輸出結(jié)果如下。160
千米2.
type
定義類通過前面的學(xué)習(xí)我們知道,使用
type(obj)可以查看一個對象的類型,此外,type
還可以用來定義類,語法格式如下。type(name,bases,
dict)學(xué)習(xí)目標(biāo):47使用
3
個參數(shù)調(diào)用type()函數(shù)就可以返回一個自定義類對象。其中,name表示類的名稱;bases
是一個元組,表示該類的父類;dict
是一個字典,表示類內(nèi)定義的屬性或方法。示例代碼如程序段P2.10
所示。P2.10
type
定義類def
say(self):print("wang,wang,wang...")return
'Hello'Dog=type("Dog",(object,),dict(say=say,
color="white"))dog=
Dog()res=dog.say()print(dog.color)print(res)48運行代碼,輸出結(jié)果如下。Hellowang,wang,wang...
white2.4.3 自定義元類通過繼承type
元類,可以創(chuàng)建自定義元類,語法格式如下。class
元類名(type):類成員示例代碼如程序段P2.11
所示。P2.11
自定義元類class
MyMetaclass(type):pass學(xué)習(xí)目標(biāo):49運行代碼,便創(chuàng)建了一個名為
MyMetaclass
的元類,利用該元類就可以創(chuàng)建類。示例代碼與運行結(jié)果如圖
2.17
所示。圖
2.17 自定義元類并創(chuàng)建類圖
2.17
中定義了一個沒有自定義成員的元類MyMetaclass,元類的類型是type;然后利用自定義元類,分別采用兩種語法格式創(chuàng)建了沒有自定義成員50的兩個類
MyClass
和
MyClass2,它們的類型都屬于自定義元類型<class'
main
.MyMetaclass'>。當(dāng)然,元類在應(yīng)用程序開發(fā)中幾乎用不到,主要用于開發(fā)框架等中間件程序,因此有所了解即可。當(dāng)需要使用元類進(jìn)行程序開發(fā)時,再深入學(xué)習(xí)Python
高級編程技術(shù)。Python
類與對象也是一種重要的代碼封裝方式,比函數(shù)的封裝形式具有更多的優(yōu)點(如多態(tài)、繼承等)。本節(jié)主要介紹類與對象的基本概念,更多內(nèi)容將在后續(xù)章節(jié)詳細(xì)介紹。
2.5 模塊對象模塊對應(yīng)于Python
源代碼文件(.py
文件),在模塊中可以定義變量、函數(shù)、類和普通語句。除了內(nèi)建模塊外,使用其他模塊都需要先導(dǎo)入。當(dāng)我們通過import
導(dǎo)入一個模塊時,Python
解釋器最終會生成一個對象,這個對象就代學(xué)習(xí)目標(biāo):51表了被加載的模塊,稱為模塊對象。如果再次導(dǎo)入這個模塊,則不會再次執(zhí)行,一個模塊無論導(dǎo)入多少次,這個模塊在整個解釋器內(nèi)有且僅有一個對象,這個對象的類型是module。示例代碼如程序段P2.12
所示。P2.12
導(dǎo)入模塊importmathprint(id(math))print(type(math))運行代碼,輸出結(jié)果如下。2199796223488 <class
'module'>輸出的結(jié)果是對象的id
值和模塊math
對象的類型??梢钥吹?/p>
math
模塊被加載后,實際會生成一個module
類的對象,該對象被math
變量引用,實際上在解釋器中也創(chuàng)建了一個名稱為
math
的局部命名空間,我們可以通過52math
變量引用模塊中所有的內(nèi)容。有時也需要給模塊起的別名,本質(zhì)上,這個別名僅僅是新創(chuàng)建一個變量引用加載的模塊對象而已。通過
import
導(dǎo)入多個模塊,本質(zhì)上也是生成多個module
類的對象。Python
解釋器啟動時,把當(dāng)前啟動腳本文件作為主模塊,主模塊的
name
屬性是"
main
"。對于主模塊導(dǎo)入的其他模塊,其
name
屬性就是模塊的名稱。示例代碼如程序段P2.13
所示。P2.13
模塊名屬性import mathprint(
name
)print(math.
name
)運行代碼,輸出結(jié)果如下。
main
Math學(xué)習(xí)目標(biāo):53可見,頂層模塊的名稱是
main
,導(dǎo)入模塊的名稱是math。因此,可以用if
name
==
'
main
'來判斷是否直接運行了該.py
文件。示例代碼如程序段P2.14
所示。P2.14
主模塊執(zhí)行判斷print("hello")if
name
==
'
main
':print("demo.py
是主模塊執(zhí)行。")運行代碼,輸出結(jié)果如下。Hellodemo.py
是主模塊執(zhí)行。542.6
文件對象在程序中使用變量來保存運行時產(chǎn)生的臨時數(shù)據(jù),程序結(jié)束后,臨時數(shù)據(jù)隨之消失,而計算機處理后的很多數(shù)據(jù)常常需要持久保存,于是人們發(fā)明了文件來持久地保存數(shù)據(jù)。計算機文件是存儲在某種長期存儲設(shè)備(如硬盤)中的一段數(shù)據(jù),由計算機文件系統(tǒng)管理。文件是操作系統(tǒng)提供給用戶(或應(yīng)用程序)操作硬盤的虛擬接口,對文件進(jìn)行讀寫操作就是對硬盤進(jìn)行讀寫操作,具體的讀寫動作由操作系統(tǒng)控制。在Python
中,我們可以通過內(nèi)置函數(shù)open()打開文件并創(chuàng)建一個文件對象(file
object),然后通過文件對象自帶的多種函數(shù)和方法操作文件。open()函數(shù)打開文件的語法格式如下。open(file,
mode='r')上式中,file
是文件參數(shù),由文件路徑與文件名組成;mode
是打開文件的學(xué)習(xí)目標(biāo):55模式,例如,'r'是讀文件,'w'是寫文件。創(chuàng)建文件對象后,文件對象提供了一組操作文件的方法,使得代碼編寫非常方便。例如,通過文件對象的write()方法來寫入文件,示例代碼如程序段P2.15
所示。P2.15
通過write()方法寫入文件f=open("test.txt",
'w')f.write("Pythonisagreat
language.")f.close()程序執(zhí)行后,在當(dāng)前文件目錄下就會創(chuàng)建test.txt
文件,文件內(nèi)容如下。Pythonisagreat
language.通過dir()函數(shù)可以獲得文件對象的屬性和方法;通過type()函數(shù)可以查看文件對象的類型。
在上面的示例中,
文本文件對象的類型是<class'_io.TextIOWrapper'>。如果打開的是二進(jìn)制文件,
其文件類型是<class56'_io.BufferedWriter'>。本節(jié)主要介紹文件對象的概念,更多Python
文件的相關(guān)內(nèi)容后面會詳細(xì)介紹。
2.7 Python
代碼風(fēng)格每位程序員都像一位藝術(shù)家,編寫程序猶如設(shè)計作品,一篇美觀整潔的代碼既能提高程序的可讀性,又具有賞心悅目的觀賞性。因此,在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度井蓋專利技術(shù)許可與轉(zhuǎn)讓合同3篇
- 2025年度新型建材鋼管租賃服務(wù)合同
- 二零二五年度家電產(chǎn)品銷售合同協(xié)議范本3篇
- 2025年度二手房屋買賣居間服務(wù)合同范本全新升級版
- 2025年度預(yù)制構(gòu)件裝配式建筑項目風(fēng)險評估與保險合同
- 二零二五年度跑步賽事場地設(shè)施租賃合同4篇
- 二零二五年度古建筑修繕泥工班組專業(yè)施工合同4篇
- 2025版民爆物品裝卸作業(yè)應(yīng)急救援預(yù)案合同3篇
- 2025年墻體改梁與裝配式建筑技術(shù)應(yīng)用合同3篇
- 2025版二零二五年度商鋪租賃合同租賃物保險條款3篇
- 礦物加工工程基礎(chǔ)知識單選題100道及答案解析
- 2024年同等學(xué)力申碩英語考試真題
- 世說新語原文及翻譯-副本
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 非遺文化走進(jìn)數(shù)字展廳+大數(shù)據(jù)與互聯(lián)網(wǎng)系創(chuàng)業(yè)計劃書
- 2024山西省文化旅游投資控股集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 科普知識進(jìn)社區(qū)活動總結(jié)與反思
- 加油站廉潔培訓(xùn)課件
- 現(xiàn)金日記賬模板(帶公式)
- 消化內(nèi)科??票O(jiān)測指標(biāo)匯總分析
- 深圳市物業(yè)專項維修資金管理系統(tǒng)操作手冊(電子票據(jù))
評論
0/150
提交評論