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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2

Python基礎XXXX

大學XX

學院XXX

教授2學習目標:掌握Python

代碼格式與風格掌握Python

標識符與關鍵字掌握Python

常量、變量與解釋器命名空間熟悉內置函數(shù)、類與對象的概念及應用熟悉模塊與文件對象的概念及應用思政內涵:通過學習和遵守命名規(guī)則與編程規(guī)范,廣大學子要養(yǎng)成遵守規(guī)則,工作嚴謹、認真負責的職業(yè)精神。學習目標:32.1

基礎語法代碼格式良好的代碼格式可提升代碼的可讀性。Python

代碼的格式是Python

語法的一部分,本節(jié)從縮進、換行和注釋

3

個方面對Python

代碼格式進行講解??s進一般使用“縮進”(即一行代碼之前的空白區(qū)域)確定

Python

代碼之間的邏輯關系和層次關系。Python

代碼的縮進可以通過

Tab

鍵或空格鍵控制,但不允許混合使用

Tab

鍵和空格鍵。輸入空格是Python

3

首選的縮進方法,一般使用

4

個空格表示一級縮進。示例代碼如程序段P2.1

所示。P2.1

代碼縮進if

True:4print("True")else:print("False")運行代碼,輸出結果如下。True代碼縮進量的不同會導致代碼語義的改變,Python

語言要求同一代碼塊的每行代碼必須具有相同的縮進量。2.

換行Python

官方建議每行代碼不超過

79

個字符,若代碼過長則應該換行。Python

會將圓括號、方括號和花括號中的行進行隱式連接,可以根據(jù)這個特點在語句外側添加一對圓括號,實現(xiàn)語句的換行,示例代碼如程序段P2.2

所示。學習目標:5P2.2

代碼換行print(['a','b',

'c','d',

'e'])運行代碼,輸出結果如下。a,b,c,d,e3.

注釋1)

單行注釋單行注釋常以#開頭。單行注釋可以作為單獨的一行放在被注釋代碼行之上,也可以放在語句或表達式之后,示例代碼如程序段P2.3

所示。P2.3

單行注釋#

使用print

輸出字符串Hello

World!print("Hello

World!")6print("Hello

Python!") #

使用print

輸出字符串Hello

Python!運行代碼,輸出結果如下。Hello

World!Hello

Python!2)

多行注釋多行注釋指的是一次性注釋程序中的多行內容(包含一行)。Python

使用

3個連續(xù)的單引號'''或

3

個連續(xù)的雙引號"""注釋多行內容,多行注釋通常用來為Python

文件、模塊、類或函數(shù)等添加版權或功能描述信息。具體格式如程序段P2.4

所示。P2.4

多行注釋'''使用

3

個單引號分別作為注釋的開頭和結尾學習目標:7可一次性注釋多行內容這里面的內容全部都是注釋內容'''標識符與關鍵字標識符標識符就是對變量、常量、函數(shù)、類等對象起的名字。Python

中的標識符需要遵守一定的命名規(guī)則,具體如下。在Python

中,標識符由字母、數(shù)字、下畫線組成。所有標識符可以包括英文、數(shù)字及下畫線,但不能以數(shù)字開頭。(3)

Python

中的標識符是區(qū)分大小寫的。(4)

以下畫線開頭的標識符是有特殊意義的。例如,以雙下畫線開頭的(

foo)代表類的私有成員,不能直接從外部調用,需通過類中的其他方法調用;8以雙下畫線開頭和結尾的

(

foo

)代表Python

中特殊方法專用的標識。(5)

不允許使用Python

預定義標識符名(關鍵字)作為自定義標識符名。合法的標識符示例如下。namename2name_3不合法的標識符示例如下。4wordtry$money#

不能以數(shù)字開頭#

try

是關鍵字,不能作為自定義標識符#

不能包含特殊字符學習目標:9在Python

中,建議按照以下方式命名標識符。見名知意:標識符應有意義,盡量做到看一眼便知道標識符的含義。例如,使用name

表示姓名;使用student

表示學生。命名規(guī)范:常量名應使用大寫的單個單詞或由下畫線連接的多個單詞命名(如ORDER_LIST_LIMIT);模塊名、函數(shù)名應使用小寫的單個單詞或由下畫線連接的多個單詞命名(如low_with_under);類名應使用以大寫字母開頭的單個或多個單詞命名(如Cat、CapWorld)。2.

關鍵字關鍵字是Python

編程語言預定義的保留字,不能用于其他目的。Python

3中一共定義了

35

個關鍵字,這些關鍵字都存儲在keyword

模塊的變量kwlist中,通過查看變量

kwlist

可查看Python

中的關鍵字,示例如程序段

P2.5

所示。P2.5

查看關鍵字10#

導入keyword

模塊import

keywordprint(keyword.kwlist)輸出結果如下。['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

中的關鍵字具有不同的作用,通過“help”(關鍵字)命令可查看關鍵字的聲明。掌握關鍵字的含義有助于理解程序的功能。Python

關鍵字及含義如表

2-1

所示。學習目標:11表

2-1Python

關鍵字及含義關鍵字含義True/False邏輯真/假None空值and/or/not邏輯與、或、非運算符as在import、except

或with

語句中給對象取別名assert斷言,用來確認某個條件必須滿足,幫助調試程序async定義協(xié)程await用于掛起阻塞的過程break用在循環(huán)結構中,結束break

所在層次的循環(huán)class定義類continue用在循環(huán)結構中,結束本次循環(huán)12def定義函數(shù)del刪除對象或其成員elif用在選擇結構中,是else

if

的縮寫except用在異常處理結構中,捕獲指定類型的異常else用在選擇結構、循環(huán)結構或異常處理結構中finally用在異常處理結構中,表示無論是否發(fā)生異常都會執(zhí)行后面的代碼forfor

循環(huán)from指明從哪個模塊中導入什么對象,還可以與yield

構成表達式global定義或聲明全局變量if用在選擇結構中,對條件進行判斷import導入模塊或模塊中的對象in成員測試學習目標:13is同一性測試lambda定義匿名函數(shù)nonlocal聲明非局部變量pass空語句,執(zhí)行該語句時什么都不做,用作占位符raise顯示拋出異常return用在函數(shù)中,返回函數(shù)值,如果沒有指定返回值,則返回空值

Nonetry用在異常處理結構中,限定可能發(fā)生異常的代碼塊whilewhile

循環(huán)結構with上下文管理,具有自動打開、關閉等管理資源的功能yield在生成器函數(shù)中用來返回值142.1.3 變量與常量1.

變量變量來源于數(shù)學,是計算機語言中能存儲計算結果或能表示值的抽象概念。程序在運行期間用到的數(shù)據(jù)會被保存在計算機的內存單元中,為了方便存取內存單元中的數(shù)據(jù),Python

使用標識符來標識不同的內存單元,從而使標識符與數(shù)據(jù)建立聯(lián)系,標識內存單元的標識符名稱稱為變量名,Python

通過賦值運算符“=”將內存單元中存儲的數(shù)值與變量名建立聯(lián)系,即定義變量,變量指向內存單元。變量是對內存單元數(shù)據(jù)、對象的引用。示例代碼如下。x=3 #

定義變量x

并賦值

3以上代碼定義的變量與內存數(shù)據(jù)之間的關系如圖

2.1

所示。學習目標:15圖

2.1 變量與內存數(shù)據(jù)之間的關系在編程語言中,將數(shù)據(jù)放入變量的過程稱為賦值(assignment)。Python

使用“=”作為賦值運算符,具體格式如下。name=

value16name

表示變量名;value

表示值,也就是要存儲的數(shù)據(jù)。注意,變量是標識符的一種,因此不能隨便命名,要遵守Python

標識符命名規(guī)則,還要避免與Python

內置函數(shù)及Python

關鍵字重名。除了直接賦值以外,Python

還支持鏈式賦值,即為多個變量同時賦相同的值,例如,x=y=z=100。此外,Python

還支持解包賦值,即將組合數(shù)據(jù)類型解包為相應數(shù)量的變量賦值,例如,i,j,k=10,20,30;m,n=n,m。2.

常量程序在運行期間用到的不可變的數(shù)據(jù)(常量)也被保存在計算機的內存單元中,Python

使用標識符來標識數(shù)據(jù)不可變的內存單元,從而使標識符與不可變的數(shù)據(jù)建立聯(lián)系,這樣的標識符名稱稱為常量名。Python

中已經定義了一些內置常量,常用的主要有

3

個:True(表示真);False(表示假);None(表示空值)。當然,在應用編程中也可以自定義常量。學習目標:17

2.2

解釋器命名空間2.2.1

Python解釋器Python

解釋器也是一個程序,它解釋執(zhí)行

Python

代碼。解釋器由一個編譯器和一個虛擬機構成,編譯器負責將源代碼轉換成字節(jié)碼文件,而虛擬機負責執(zhí)行字節(jié)碼。因此,解釋型語言也有編譯過程,只不過這個編譯過程并不是直接生成目標代碼,而是生成中間代碼(字節(jié)碼),然后再通過虛擬機來逐行解釋執(zhí)行字節(jié)碼。Python

解釋器主要有以下

6

款。

Cpython:是用C

語言開發(fā)的官方默認解釋器。Ipython:是基于CPython

之上的一個交互式解釋器。PyPy:采用JIT

技術,對Python

代碼進行動態(tài)編譯,可提高代碼的執(zhí)行18速度。

Jython:是運行在Java

平臺上的Python

解釋器,可直接編譯成Java

字節(jié)碼執(zhí)行。IronPython:是運行在微軟.Net

平臺上的

Python

解釋器,可直接編譯成.Net

的字節(jié)碼。

MicroPython:以微控制器為目標,針對嵌入式環(huán)境。Python

源程序執(zhí)行過程如下。執(zhí)行python

XX.py

后,將會啟動Python

解釋器。

Python

解釋器的編譯器會將.py

源文件編譯成字節(jié)碼,

生成PyCodeObject

字節(jié)碼對象存放在內存中。

Python

解釋器的虛擬機將執(zhí)行內存中的字節(jié)碼對象,并將其轉換為機器語言,虛擬機與操作系統(tǒng)交互,使機器語言在機器硬件上運行。運行結束后,Python

解釋器將PyCodeObject

寫入pyc

文件中。當學習目標:19Python

程序第二次運行時,程序會先在硬盤中尋找

pyc

文件,如果找到,則直接載入,否則就重復上面的過程。2.2.2

命名空間在程序開發(fā)中,由不同的人員開發(fā)不同的模塊,難免會出現(xiàn)重名的情況。因此,解釋器對標識符、變量等采用命名空間的方式來管理編譯對象的名稱。命名空間就是一些命名(名稱)的集合,它們與相應的對象有對應關系。多個命名空間相互獨立,允許不同命名空間中有相同的名稱。每個命名空間都是一個容器,容器內的元素可以映射到對象的名稱,對象對應的名稱分為變量名、函數(shù)名、類名、模塊名、屬性名。Python

的命名空間分為

3

類:內置命名空間、全局命令空間和局部命名空間。201.

內置命名空間內置命名空間是運行Python

解釋器時,解釋器自動導入內建模塊

builtins時創(chuàng)建的命名空間,包含的對象有內置常量、內置函數(shù)、內置異常類等。內置命名空間的對象在整個應用程序中都可以使用。dir()函數(shù)命令不帶參數(shù),可返回解釋器當前范圍內的變量、對象的內容列表。示例如圖

2.2

所示。圖

2.2解釋器當前范圍及內置命名空間的內容學習目標:21從運行結果可知,獨立運行解釋器,解釋器當前范圍名稱屬性“

name

”的值是“

main

”。解釋器把自動導入的內置模塊構建為對象“

builtins

”,其類型是“<module'builtins'(built-in)>”,其名稱屬

性“

builtins

.

name

”的值是“builtins”。內置命名空間就是

builtins

指向的空間,解釋器會自動查找此空間。dir(

biltins

)命令返回了內置命名空間的內容。2.

全局命名空間全局命名空間是運行Python

解釋器時,解釋器執(zhí)行

Python

源文件時創(chuàng)建的命名空間,包含的對象有當前文件中的函數(shù)、類、全局變量,以及導入的其他模塊的成員。Python

解釋器在啟動時會自動創(chuàng)建全局命名空間及解釋器當前運行空間(或稱為解釋器主空間),并把運行的文件作為主模塊對象,其名稱屬性值是“

main

”,同時,自動導入內建模塊

builtins,內置命名空間的對象也完22全由應用程序使用。單獨運行解釋器,用

globals()查看全局命名空間,如圖

2.3所示。圖

2.3 全局命名空間globals()命令返回了全局命名空間的成員及其值,用字典表示。編輯代碼文件,如圖

2.4

所示。學習目標:23圖

2.4 編輯Python

程序解釋器運行以上程序,用globals()查看全局命名空間,如圖

2.5

所示。24圖

2.5 解釋器執(zhí)行程序的全局命名空間從運行結果可知,全局命名空間中多了

file

:'D:/python/demo.py','x':25

,

'y':30

,

'z':55

4

個字典元素。解釋器把直接運行的文件作為主模塊,

file

中存儲的是主模塊的文件路徑。主模塊運行在解釋器主空間,也就是全局命名空間。主模塊的名稱屬性:“

name

=

'

main

'”。學習目標:25在當前目錄下建立一個Python

文件,文件名為hello.py,文件中只寫一個語句:print("hello")。在

demo.py

文件中導入該文件,如圖

2.6

所示。圖

2.6 編輯程序解釋器執(zhí)行以上程序,用globals()查看全局命名空間,如圖

2.7

所示。26圖

2.7 導入模塊hello

后的全局命名空間可以看到,全局命名空間中多了導入的模塊'hello':<module'hello

fromD:\\python\hello.py'>。3.

局部命名空間學習目標:27局部命名空間是在定義類、調用函數(shù)時創(chuàng)建的,包含類的屬性、被調用函數(shù)參數(shù)和函數(shù)內部定義的變量等。在函數(shù)內部可以用

print(locals())打印輸出局部命名空間內容,示例如圖

2.8

所示。圖

2.8局部命名空間28當Python

需要使用變量時,會在上述命名空間中依次查找,順序為局部命名空間、全局命名空間、內置命名空間。同一命名空間中的變量不能重名,但不同命名空間中的變量可以重名。

2.3 函數(shù)對象數(shù)學中經常用到函數(shù),利用函數(shù)可以實現(xiàn)一定的運算功能。計算機程序設計中的函數(shù)與數(shù)學中的函數(shù)類似,計算機程序設計中的函數(shù)是指一段可以完成一定操作功能的代碼。程序在運行期間這段代碼會被保存在計算機的內存單元中,為了標識內存單元中的這段代碼并方便重復使用,Python

使用標識符加圓括號來標識這段代碼,這個標識符稱為函數(shù)名,圓括號中是這段代碼運行時需要的數(shù)據(jù),稱為函數(shù)參數(shù),函數(shù)執(zhí)行后通過函數(shù)名返回結果。函數(shù)的基本格式為“函數(shù)名(變量名)”,變量可以有多個。函數(shù)中定義的變量處于局部命名空間學習目標:29中。Python

中,函數(shù)也是對象,是一種具有功能行為的對象,函數(shù)分為內置函數(shù)和自定義函數(shù)。2.3.1

內置函數(shù)Python

中已經定義了很多內置函數(shù)。內置函數(shù)就是

Python

提供的、可以直接使用的函數(shù),是解釋器啟動時自動導入內建模塊加載的函數(shù)。常用的Python

內置函數(shù)如表

2-2

所示。表

2-2 常用的Python

內置函數(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

個內置函數(shù),不同的

Python

版本,內置函數(shù)的數(shù)量也不學習目標:31同。若要查看所使用的Python

版本的內置函數(shù),則可以直接在Python

解釋器交互命令行輸入“dir(

builtins

)”,命令執(zhí)行后便會顯示所有的內置常量和內置函數(shù)。在命令行輸入“l(fā)en(dir(

builtins

))”,命令執(zhí)行后,輸出結果為159,說明當前版本(Python

3.11)中有

159

個內置函數(shù)和內置常量,其中首字母大寫的是內置常量,首字母小寫的是內置函數(shù)。常用的內置函數(shù)按功能可以分為以下

12

類。

查看類型:type()。幫助信息:help()。輸入輸出:input()、print()。進制轉換:bin()、oct()、hex()。編碼轉換:ord()、chr()、ascii()。類型轉換:bool()、int()、float()、complex()。數(shù)學運算: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()。調用內置函數(shù)的語法格式如下。函數(shù)名([參數(shù)名])例如,查看對象類型的函數(shù)type()的調用及運行結果如圖

2.9

所示。學習目標:33圖

2.9 查看對象類型運行結果說明abs

對象是內建的函數(shù)或方法類型。若要了解內置函數(shù)的功能和使用方法,則可以通過

Python

網站的Python

教程進行學習。另一種簡便的學習方法是通過內置的幫助函數(shù)查詢。例如,查詢dir()函數(shù)說明的示例代碼及輸出結果如圖

2.10

所示。另外,在交互模式下執(zhí)行help()命令,進入幫助狀態(tài),直接輸入函數(shù)名即可獲得幫助信息,如圖

2.11

所示。34圖

2.10通過幫助函數(shù)查看dir()功能 圖

2.11 help()幫助命令模式內置函數(shù)id()用于查看對象的地址;bin()函數(shù)可以將十進制數(shù)值轉換為二進制數(shù)值,oct()函數(shù)可以將十進制數(shù)值轉換為八進制數(shù)值,hex()函數(shù)可以將十進制數(shù)值轉換為十六進制數(shù)值;ord()函數(shù)可以將字符轉換為unicode

編碼,chr()函數(shù)可以將

unicode

編碼轉換為字符;ascii()函數(shù)在

ASCII

編碼范圍內返回ASCII

字符,其他返回unicode

編碼。示例如圖

2.12

所示。內置數(shù)學運算函數(shù)abs()、max()、min()、sum()、pow()、round()、divmod()學習目標:35的計算示例如圖

2.13

所示。圖

2.12對象地址、進制轉換與編碼轉換函數(shù)的示例 圖

2.13 內置數(shù)學運算函數(shù)的計算示例在后面的相關章節(jié)中會逐步介紹內置函數(shù)的使用。2.3.2 自定義函數(shù)Python

編程除使用內置函數(shù)外,還可以用關鍵字

def

定義函數(shù),語法格式如下。36def

函數(shù)名(參數(shù)名...):函數(shù)體[return 返回數(shù)據(jù)]返回語句是可選語句,只有當函數(shù)有返回值時才需要。自定義函數(shù)的調用與內置函數(shù)的調用相同,格式如下。函數(shù)名([參數(shù)名])例如,定義一個加法函數(shù),示例代碼如程序段P2.6

所示。P2.6

自定義加法函數(shù)與調用def add(x,y):

#

定義加法函數(shù),函數(shù)名為add,參數(shù)名為x

和yz=x+y #

函數(shù)體,執(zhí)行加法運算return

z

#

返回語句,返回加法運算結果print(add(10,20))

#

傳遞參數(shù)值

10

20

調用函數(shù),輸出計算結果學習目標:37運行代碼,輸出結果如下。30Python

的函數(shù)對象是一種功能強大的代碼封裝方式,本節(jié)僅介紹基本概念,在后面的函數(shù)編程中會詳細介紹。

2.4 類與對象在turtle

海龜對象繪圖程序中,我們已經認識了對象的概念。對象的概念最初來源于哲學,指代現(xiàn)實世界中的一切事物,映射到

Python

世界中就是Python

的對象。Python

中內置了很多對象。當然,我們也可以自定義類型并創(chuàng)建對象。382.4.1 內置類型與對象1.

實例對象Python

內置的實例對象如下。數(shù)值對象:指具體數(shù)值,如整數(shù)值、實數(shù)值、復數(shù)值。常量對象:指Python

中定義的常數(shù),如None、True、False。內置函數(shù)對象:指只有行為的對象,如abs()函數(shù)等。2.

類型對象Python

內置的類型對象如下。(1)

object

類型對象,也稱為基類。(2)

基本數(shù)據(jù)類型對象:整數(shù)類型

int、浮點類型

float、復數(shù)類型

complex、布爾類型bool(只有兩個實例對象,即常量對象

True

和False)。學習目標:39(3)

組合數(shù)據(jù)類型對象:字符串

str、字節(jié)組

bytes、列表

list、元組

tuple、集合set、字典dict。3.

元類對象Python

的內置元類對象只有一個,即type

元類對象。內置的一些實例對象是類型對象的實例,例如,整數(shù)數(shù)據(jù)的類型對象是

int。實例對象就是一個個整數(shù),整數(shù)對象可進行加、減等運算。查看內置對象類型和其所在內存地址的示例代碼及輸出結果如圖

2.14

所示。圖

2.14查看內置對象

8

的類型和內存地址40從圖

2.14

中可以看出,數(shù)字

8

是一個實例對象,類型為int,內存地址為140710818014216。當把它賦值給變量

x

時,變量

x

的類型也是int,其

id

值并沒有變,變量只是引用了它。通過

dir()函數(shù)可以查看一個對象的所有成員,例如,查看實例對象

8

和類型對象int

的所有成員的示例如圖

2.15

所示。圖

2.15實例對象

8

和類型對象int

的所有成員學習目標:41運行結果顯示了

8

和int

的屬性和方法,可以看到它們都有

add

()方法。兩個整數(shù)相加實際上調用了整數(shù)對象的

add

()方法來執(zhí)行加法運算,如圖2.16

所示。圖

2.16

整數(shù)對象的加法運算調用對象方法的語法格式是“對象名.方法名”,訪問對象屬性的語法格式是“對象名.屬性名”。例如,字符串(str)對象具有很多操作方法,如把字符串首字母轉換為大寫字母的方法等。調用字符串的操作方法的示例代碼如程序段P2.7所示。42P2.7

字符串對象方法的調用sr

=

'ahu

learning

python'

#

定義字符串#

capitalize()方法把字符串首字母轉換為大寫字母#

title()方法把每個單詞首字母轉換為大寫字母#

upper()方法把字符串中的每個字母都轉換為大寫字母sr1=

sr.capitalize()print(sr1)sr2=

sr.title()print(sr2)sr3=

sr.upper()print(sr3)運行代碼,輸出結果如下。Ahu

learning

python Ahu

Learning

Python AHULEARNING

PYTHON學習目標:432.4.2 自定義類1.

class

定義類在現(xiàn)實生活中,類是對具體事物對象的抽象描述。而在程序設計中,類是對象的模板,首先定義描述一類事物對象的類,然后由類來創(chuàng)建對象。Python中用關鍵字class

定義類,語法格式如下。class

類名([object]):屬性名def

方法名(self,[變量名]):方法體[return

返回數(shù)據(jù)]在定義類時,類名首字母要大寫,括號內表示定義該類時繼承的父類名稱。44Python

規(guī)定,所有的類都會繼承

object

基類,如果定義的類只繼承

object

基類,則可以省略不寫。定義方法的參數(shù)self

表示調用該方法的對象自身。通過類創(chuàng)建對象的語法格式如下。變量名=類名()使用自定義類和對象的方式與使用內置類型和對象的方式一樣。自定義類與對象的示例代碼如程序段P2.8

所示。P2.8

自定義類并創(chuàng)建使用對象#

類名Dog#

屬性color

被賦值為White#

方法名sayclass

Dog(object):color=

'White'def

say(self):print('wang,wang,wang....')return

'Hello'#

方法返回值Hello學習目標:45#

創(chuàng)建對象,對象名dog#

訪問對象屬性#

調用對象方法dog=

Dog()print(dog.color)res=dog.say()print(res)運行代碼,輸出結果如下。White wang,wang,wang.... HelloPython

的默認編碼是UTF-8,支持中文,因此可以直接用中文作為類名、變量名。下面用中文給轎車建立一個簡單的類模型,示例代碼如程序段

P2.9

所示。P2.9

用中文描述轎車類并創(chuàng)建對象class

轎車:顏色

=

"紅色"46def

前進(self):print("160

千米")轎車王

=

轎車()print(轎車王.顏色)轎車王.前進()#

創(chuàng)建對象#

訪問屬性#

調用方法紅色運行代碼,輸出結果如下。160

千米2.

type

定義類通過前面的學習我們知道,使用

type(obj)可以查看一個對象的類型,此外,type

還可以用來定義類,語法格式如下。type(name,bases,

dict)學習目標:47使用

3

個參數(shù)調用type()函數(shù)就可以返回一個自定義類對象。其中,name表示類的名稱;bases

是一個元組,表示該類的父類;dict

是一個字典,表示類內定義的屬性或方法。示例代碼如程序段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運行代碼,輸出結果如下。Hellowang,wang,wang...

white2.4.3 自定義元類通過繼承type

元類,可以創(chuàng)建自定義元類,語法格式如下。class

元類名(type):類成員示例代碼如程序段P2.11

所示。P2.11

自定義元類class

MyMetaclass(type):pass學習目標:49運行代碼,便創(chuàng)建了一個名為

MyMetaclass

的元類,利用該元類就可以創(chuàng)建類。示例代碼與運行結果如圖

2.17

所示。圖

2.17 自定義元類并創(chuàng)建類圖

2.17

中定義了一個沒有自定義成員的元類MyMetaclass,元類的類型是type;然后利用自定義元類,分別采用兩種語法格式創(chuàng)建了沒有自定義成員50的兩個類

MyClass

MyClass2,它們的類型都屬于自定義元類型<class'

main

.MyMetaclass'>。當然,元類在應用程序開發(fā)中幾乎用不到,主要用于開發(fā)框架等中間件程序,因此有所了解即可。當需要使用元類進行程序開發(fā)時,再深入學習Python

高級編程技術。Python

類與對象也是一種重要的代碼封裝方式,比函數(shù)的封裝形式具有更多的優(yōu)點(如多態(tài)、繼承等)。本節(jié)主要介紹類與對象的基本概念,更多內容將在后續(xù)章節(jié)詳細介紹。

2.5 模塊對象模塊對應于Python

源代碼文件(.py

文件),在模塊中可以定義變量、函數(shù)、類和普通語句。除了內建模塊外,使用其他模塊都需要先導入。當我們通過import

導入一個模塊時,Python

解釋器最終會生成一個對象,這個對象就代學習目標:51表了被加載的模塊,稱為模塊對象。如果再次導入這個模塊,則不會再次執(zhí)行,一個模塊無論導入多少次,這個模塊在整個解釋器內有且僅有一個對象,這個對象的類型是module。示例代碼如程序段P2.12

所示。P2.12

導入模塊importmathprint(id(math))print(type(math))運行代碼,輸出結果如下。2199796223488 <class

'module'>輸出的結果是對象的id

值和模塊math

對象的類型??梢钥吹?/p>

math

模塊被加載后,實際會生成一個module

類的對象,該對象被math

變量引用,實際上在解釋器中也創(chuàng)建了一個名稱為

math

的局部命名空間,我們可以通過52math

變量引用模塊中所有的內容。有時也需要給模塊起的別名,本質上,這個別名僅僅是新創(chuàng)建一個變量引用加載的模塊對象而已。通過

import

導入多個模塊,本質上也是生成多個module

類的對象。Python

解釋器啟動時,把當前啟動腳本文件作為主模塊,主模塊的

name

屬性是"

main

"。對于主模塊導入的其他模塊,其

name

屬性就是模塊的名稱。示例代碼如程序段P2.13

所示。P2.13

模塊名屬性import mathprint(

name

)print(math.

name

)運行代碼,輸出結果如下。

main

Math學習目標:53可見,頂層模塊的名稱是

main

,導入模塊的名稱是math。因此,可以用if

name

==

'

main

'來判斷是否直接運行了該.py

文件。示例代碼如程序段P2.14

所示。P2.14

主模塊執(zhí)行判斷print("hello")if

name

==

'

main

':print("demo.py

是主模塊執(zhí)行。")運行代碼,輸出結果如下。Hellodemo.py

是主模塊執(zhí)行。542.6

文件對象在程序中使用變量來保存運行時產生的臨時數(shù)據(jù),程序結束后,臨時數(shù)據(jù)隨之消失,而計算機處理后的很多數(shù)據(jù)常常需要持久保存,于是人們發(fā)明了文件來持久地保存數(shù)據(jù)。計算機文件是存儲在某種長期存儲設備(如硬盤)中的一段數(shù)據(jù),由計算機文件系統(tǒng)管理。文件是操作系統(tǒng)提供給用戶(或應用程序)操作硬盤的虛擬接口,對文件進行讀寫操作就是對硬盤進行讀寫操作,具體的讀寫動作由操作系統(tǒng)控制。在Python

中,我們可以通過內置函數(shù)open()打開文件并創(chuàng)建一個文件對象(file

object),然后通過文件對象自帶的多種函數(shù)和方法操作文件。open()函數(shù)打開文件的語法格式如下。open(file,

mode='r')上式中,file

是文件參數(shù),由文件路徑與文件名組成;mode

是打開文件的學習目標:55模式,例如,'r'是讀文件,'w'是寫文件。創(chuàng)建文件對象后,文件對象提供了一組操作文件的方法,使得代碼編寫非常方便。例如,通過文件對象的write()方法來寫入文件,示例代碼如程序段P2.15

所示。P2.15

通過write()方法寫入文件f=open("test.txt",

'w')f.write("Pythonisagreat

language.")f.close()程序執(zhí)行后,在當前文件目錄下就會創(chuàng)建test.txt

文件,文件內容如下。Pythonisagreat

language.通過dir()函數(shù)可以獲得文件對象的屬性和方法;通過type()函數(shù)可以查看文件對象的類型。

在上面的示例中,

文本文件對象的類型是<class'_io.TextIOWrapper'>。如果打開的是二進制文件,

其文件類型是<class56'_io.BufferedWriter'>。本節(jié)主要介紹文件對象的概念,更多Python

文件的相關內容后面會詳細介紹。

2.7 Python

代碼風格每位程序員都像一位藝術家,編寫程序猶如設計作品,一篇美觀整潔的代碼既能提高程序的可讀性,又具有賞心悅目的觀賞性。因此,在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論