




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