Python編程基礎(chǔ)與應(yīng)用第2章 Python基礎(chǔ)_第1頁(yè)
Python編程基礎(chǔ)與應(yīng)用第2章 Python基礎(chǔ)_第2頁(yè)
Python編程基礎(chǔ)與應(yīng)用第2章 Python基礎(chǔ)_第3頁(yè)
Python編程基礎(chǔ)與應(yīng)用第2章 Python基礎(chǔ)_第4頁(yè)
Python編程基礎(chǔ)與應(yīng)用第2章 Python基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論