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

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論