《Python程序設(shè)計(jì)基礎(chǔ)》 課件第4章函數(shù)_第1頁
《Python程序設(shè)計(jì)基礎(chǔ)》 課件第4章函數(shù)_第2頁
《Python程序設(shè)計(jì)基礎(chǔ)》 課件第4章函數(shù)_第3頁
《Python程序設(shè)計(jì)基礎(chǔ)》 課件第4章函數(shù)_第4頁
《Python程序設(shè)計(jì)基礎(chǔ)》 課件第4章函數(shù)_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章

函數(shù)自定義函數(shù)函數(shù)的高級(jí)用法字符串與集合函數(shù)常用函數(shù)思維導(dǎo)圖知識(shí)目標(biāo)理解掌握熟悉24掌握常用函數(shù)的使用熟悉自定義函數(shù)的定義和調(diào)用1熟悉字符串的常用函數(shù)3理解函數(shù)的參數(shù)傳遞技能目標(biāo)掌握熟悉學(xué)會(huì)掌握自定義函數(shù)的編程應(yīng)用12熟悉掌握字符串的編程應(yīng)用3學(xué)會(huì)文本解析的操作方法4學(xué)會(huì)綜合運(yùn)用所學(xué)知識(shí)解決實(shí)際編程問題思政目標(biāo)123弘揚(yáng)自信自強(qiáng)、守正創(chuàng)新、踔厲奮發(fā)、勇毅前行的精神品質(zhì)。通過“殺毒軟件之父,王江民”的學(xué)習(xí),鼓勵(lì)學(xué)生明確目標(biāo)、持之以恒。面對(duì)困難要保持銳意進(jìn)取、克難攻堅(jiān)的奮斗精神。目錄函數(shù)的高級(jí)用法4.24.1自定義函數(shù)4.3字符串與集合函數(shù)44常用函數(shù)知識(shí)架構(gòu)4.1自定義函數(shù)12354函數(shù)定義函數(shù)調(diào)用按值傳遞和引用傳遞return語句學(xué)生實(shí)踐練習(xí)4.1自定義函數(shù)1

函數(shù)定義

函數(shù)是組織好的,可重復(fù)使用的,用來實(shí)現(xiàn)單一或相關(guān)聯(lián)功能的代碼段。函數(shù)能提高應(yīng)用的模塊性和代碼的重復(fù)利用率,可調(diào)用該函數(shù)執(zhí)行函數(shù)定義的特定任務(wù)。通過使用函數(shù),程序的編寫、閱讀、測(cè)試和修復(fù)都將更容易。

函數(shù)定義的幾個(gè)規(guī)則如下:

(1)函數(shù)代碼塊以def關(guān)鍵詞開頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)()。

(2)任何傳入?yún)?shù)和自定義變量必須放在圓括號(hào)中間。

(3)函數(shù)內(nèi)容以冒號(hào)起始,并且縮進(jìn)。

(4)return[表達(dá)式]結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方,不帶表達(dá)式的

return相當(dāng)于返回None?!菊Z法】def函數(shù)名稱(參數(shù)):'''函數(shù)_文檔字符串'''函數(shù)執(zhí)行語句return[expression]4.1自定義函數(shù)1

函數(shù)定義其中參數(shù)的定義包括以下4種方式。

(1)(arg1,arg2,…):一個(gè)函數(shù)可以定義多個(gè)參數(shù),每個(gè)參數(shù)間用逗號(hào)分割,

用這種方式定義的函數(shù)在調(diào)用時(shí)也必須在函數(shù)名后的小括號(hào)里提供個(gè)數(shù)相等的值(實(shí)際參數(shù),簡(jiǎn)稱實(shí)參),而且順序必須相同,也就是說在這種調(diào)用方式中,形參和實(shí)參的個(gè)數(shù)必須一致,而且必須一一對(duì)應(yīng),即第一個(gè)形參對(duì)應(yīng)第一個(gè)實(shí)參。

(2)(arg1,arg2=value2,…):第一種的改進(jìn)版,提供了默認(rèn)值,調(diào)用該函數(shù),如a(1,2)則arg1取1,arg2取2,但是如果按a(1)調(diào)用,則不會(huì)報(bào)錯(cuò),這個(gè)時(shí)候arg1取1,arg2則為默認(rèn)的value2。

(3)(*arg1):上述兩種方式均是有多少個(gè)形參,就傳入多少個(gè)實(shí)參,當(dāng)不確定有多少個(gè)參數(shù)時(shí),可以采用第三種方式,即以一個(gè)“*”加上形參名的方式來表示這個(gè)函數(shù)的實(shí)參個(gè)數(shù)不確定,可能有0個(gè)也可能有多個(gè)。注意:不管有多少個(gè),在函數(shù)內(nèi)部都被存放在以形參名為標(biāo)識(shí)符的元組中。4.1自定義函數(shù)1

函數(shù)定義

(4)(**arg1):在形參名前加兩個(gè)“*”,表示參數(shù)在函數(shù)內(nèi)部將被存放在以形參名為標(biāo)識(shí)符的dictionary中,這時(shí)調(diào)用函數(shù)時(shí)需要采用arg1=value1,arg2=value2這樣的形式。例如,使用a(x=1,y=2,z=3)方式,則參數(shù)會(huì)以{'y':2,'x':1,'z':3}方式保存。如定義一個(gè)計(jì)算最大值的方法,參考代碼如下:defcalMax(a,b):

'''函數(shù)的文檔注釋,求兩個(gè)數(shù)的最大值'''

ifa>b:

print("最大值為",a)

returna

print("最大值為",sb)

returnb4.1自定義函數(shù)2

函數(shù)調(diào)用

定義函數(shù)時(shí)只給了函數(shù)一個(gè)名稱,指定了函數(shù)里包含的參數(shù)和代碼塊結(jié)構(gòu)函數(shù),因此定義后沒有被調(diào)用是不會(huì)執(zhí)行函數(shù)中的代碼塊的?!菊Z法】函數(shù)名稱(參數(shù))【示例4.1】定義求兩個(gè)數(shù)的最大值的calMax()函數(shù),并調(diào)用該函數(shù)。defcalMax(a,b):

'''函數(shù)的文檔注釋,求兩個(gè)數(shù)的最大值'''

ifa>b:

print("最大值為",a)

returna

print("最大值為",b)

returnbnum1=int(input("請(qǐng)輸入一個(gè)數(shù)字:"))num2=int(input("請(qǐng)?jiān)佥斎胍粋€(gè)數(shù)字:"))calMax(num1,num2)4.1自定義函數(shù)2

函數(shù)調(diào)用定義并調(diào)用calMax()函數(shù)的運(yùn)行結(jié)果如圖4.1所示。

通過示例4.1分析可知,函數(shù)調(diào)用時(shí)傳入的參數(shù)個(gè)數(shù)必須與函數(shù)定義時(shí)的參數(shù)個(gè)數(shù)保持一致,并且一一對(duì)應(yīng)。4.1自定義函數(shù)3

按值傳遞和引用傳遞

傳遞參數(shù)時(shí),Python不允許開發(fā)者指定使用傳值還是傳引用。Python參數(shù)傳遞采用的是“傳對(duì)象引用”的方式。實(shí)際上,這種方式相當(dāng)于傳值和傳引用的一種綜合。

如果函數(shù)收到的是一個(gè)可變對(duì)象(如字典或者列表)的引用,就能修改對(duì)象的原始值—相當(dāng)于通過“傳引用”來傳遞對(duì)象。如果函數(shù)收到的是一個(gè)不可變對(duì)象(如數(shù)字、字符串或者元組)的引用,就不能直接修改原始對(duì)象—相當(dāng)于通過“傳值”來傳遞對(duì)象。

在Python中,strings、tuples和numbers是不可更改的對(duì)象,而list、dict等則是可以修改的對(duì)象。4.1自定義函數(shù)3

按值傳遞和引用傳遞【示例4.2】在一個(gè)函數(shù)中分別改變數(shù)字、字符串和元組的值,觀察這三個(gè)值是否改變。defchangeValue(num,string,my_tuple):

num=5

string="Trumple"

my_tuple=(3,6)num=8string="Kitty"my_tuple=(4,8)changeValue(num,string,my_tuple)print(num,string,my_tuple)4.1自定義函數(shù)3

按值傳遞和引用傳遞觀察值的改變的運(yùn)行結(jié)果如圖4.2所示。

通過對(duì)示例4.2進(jìn)行分析可知,如果函數(shù)收到的是一個(gè)不可變對(duì)象(如數(shù)字、字符串或者元組)的引用,就不能直接修改原始對(duì)象,相當(dāng)于通過“傳值”來傳遞對(duì)象。4.1自定義函數(shù)3

按值傳遞和引用傳遞【示例4.3】定義一個(gè)修改字典或列表元素的函數(shù),修改后,觀察列表或字典對(duì)象是否被改變。defchangeValue(my_list,my_dict):

'''方法注釋,修改列表或字典的值'''

my_list[0]="James"

my_dict["name"]="Kobe"my_list=["wade","bosh","harden"]my_dict={"name":"paul","age":32}changeValue(my_list,my_dict)#調(diào)用changeValue函數(shù)print(my_list)print(my_dict)4.1自定義函數(shù)3

按值傳遞和引用傳遞觀察列表或字典對(duì)象的改變的運(yùn)行結(jié)果如圖4.3所示。

通過對(duì)示例4.3進(jìn)行分析可知,如果函數(shù)收到的是一個(gè)可變對(duì)象(如字典或者列表)的引用,就能修改對(duì)象的原始值,相當(dāng)于通過“傳引用”來傳遞對(duì)象。4.1自定義函數(shù)4return語句

return語句可以從Python函數(shù)中返回一個(gè)值,每個(gè)函數(shù)都要有一個(gè)返回值。如果沒有用return語句返回值,那么將得到一個(gè)None對(duì)象的結(jié)果,而None表示沒有任何值。在函數(shù)調(diào)用時(shí)可以將調(diào)用語句看作一個(gè)具體的值,將該值賦給一個(gè)變量。同時(shí),return語句表示函數(shù)的結(jié)束,雖然在Python語言中可以在return語句后再添加其他執(zhí)行代碼,但return語句后同一范圍內(nèi)的執(zhí)行代碼都不會(huì)被執(zhí)行。

【示例4.4】首先定義一個(gè)獲取兩個(gè)數(shù)中的最大數(shù)的函數(shù),然后通過該函數(shù)分別獲取3個(gè)數(shù)、4個(gè)數(shù)的最大數(shù)。defcalMax(a,b):

'''獲取兩個(gè)數(shù)的最大數(shù)'''

ifa>b:

returna

returnb

print("return后的語句")#在return語句后的代碼都不會(huì)執(zhí)行num=calMax(23,45)print("calMax(23,45)結(jié)果為:",num)print("calMax(56,11)結(jié)果為:",calMax(56,11))print("6,9,13的最大值為",calMax(6,calMax(9,13)))print("6,15,13,12的最大值為",calMax(calMax(6,15),calMax(13,12)))4.1自定義函數(shù)4return語句

獲取最大數(shù)的運(yùn)行結(jié)果如圖4.4所示。

通過對(duì)示例4.4進(jìn)行分析可知,在函數(shù)調(diào)用時(shí)可以將調(diào)用語句看作一個(gè)具體的值,如在該例中可以將calMax(9,13)看作具體的數(shù)值13。該數(shù)值可以賦值給一個(gè)變量,也可以在代碼中看作值的直接使用。另外,可以注意到函數(shù)中return后面的print語句沒有被執(zhí)行。4.1自定義函數(shù)5

學(xué)生實(shí)踐練習(xí)1.需求說明

定義一個(gè)接收4個(gè)參數(shù)的函數(shù),最后一個(gè)參數(shù)為可選的布爾型參數(shù),前3個(gè)參數(shù)為帶排序的數(shù)字。在不指定時(shí)排序?yàn)檎?,指定時(shí)排序?yàn)榈剐?,效果如圖4.5所示。2.實(shí)現(xiàn)思路

(1)將前3個(gè)參數(shù)放置在一個(gè)列表中。

(2)判斷最后一個(gè)參數(shù)是否為指定,依據(jù)布爾類型來決定是否按正序排列,運(yùn)行結(jié)果如圖4.5所示。知識(shí)架構(gòu)4.2函數(shù)的高級(jí)用法1234傳遞參數(shù)結(jié)合循環(huán)使用函數(shù)函數(shù)模塊中的調(diào)用學(xué)生實(shí)踐練習(xí)4.2函數(shù)的高級(jí)用法1

傳遞參數(shù)函數(shù)中傳遞參數(shù)的常見情況,分為以下三種。1.傳遞可選參數(shù)

在上一節(jié)中講過函數(shù)參數(shù)的幾種表示方法,其中一種就是以提供默認(rèn)值的方式來傳遞參數(shù)的。有時(shí)候,需要讓實(shí)參變成可選的,這樣使用函數(shù)的人就只需要在必要時(shí)才提供額外的信息,可以使用默認(rèn)值來實(shí)現(xiàn)讓參數(shù)變成可選的。

【示例4.5】定義一個(gè)函數(shù),它接收3個(gè)參數(shù),其中第三個(gè)參數(shù)為可選參數(shù),默認(rèn)值為空。4.2函數(shù)的高級(jí)用法1(1)使用兩個(gè)參數(shù)調(diào)用可選參數(shù)的函數(shù),代碼如下:deffunc_info(name,age,city=''):

ifcity:

information='姓名:'+name+',年齡:'+str(age)+',城市:'+city

else:

information='姓名:'+name+',年齡:'+str(age)

returninformationinformation=func_info('張三',20)print(information)運(yùn)行該代碼,輸出結(jié)果如圖4.6所示。4.2函數(shù)的高級(jí)用法1(2)傳遞3個(gè)參數(shù),查看調(diào)用結(jié)果,代碼如下:information2=func_info('李四',19,'北京')print(information2)運(yùn)行該代碼,輸出結(jié)果如圖4.7所示。

從圖4.7所示的輸出結(jié)果可以看出,該函數(shù)接收了3個(gè)參數(shù)后,輸出的字符串包含了第三個(gè)參數(shù)的相關(guān)信息。

【注意】在定義可選參數(shù)函數(shù)的傳遞參數(shù)時(shí),必須要將可選參數(shù)定義在參數(shù)列表的最后,否則會(huì)報(bào)錯(cuò)。4.2函數(shù)的高級(jí)用法1(3)錯(cuò)誤的定義方式,代碼如下:deffunc_info_v2(name,city='',age):

pass

returnNoneinformation=func_info_v2('張三',20)print(information)運(yùn)行該代碼,輸出結(jié)果如圖4.8所示。4.2函數(shù)的高級(jí)用法12.傳遞任意數(shù)量的參數(shù)

在預(yù)先不知道需要接收多少個(gè)實(shí)參時(shí),使用“*args”來指定函數(shù)的形參,這時(shí)會(huì)讓Python創(chuàng)建一個(gè)名為args的空元組,并將接收到的所有值都封裝到這個(gè)元組中,即使該元組只有一個(gè)元素也如此。之后如果要獲取某個(gè)參數(shù)時(shí),可以通過形參的位置來指定,這在編寫main()函數(shù)時(shí)非常重要?!臼纠?.6】定義一個(gè)函數(shù),通過不同的方式獲取函數(shù)中的參數(shù)。(1)定義一個(gè)多參數(shù)的函數(shù),代碼如下:deffunc_args(*args):

returnargs在上述代碼中,定義了一個(gè)接收任意數(shù)量參數(shù)的函數(shù),并將接收到的參數(shù)返回。4.2函數(shù)的高級(jí)用法1(2)給定義好的函數(shù)傳遞任意個(gè)參數(shù),并查看返回值,代碼如下:names=func_args('tom','jerry','cat','dog')print(names)運(yùn)行該代碼,輸出結(jié)果如圖4.9所示。從輸出可知,該函數(shù)實(shí)現(xiàn)了將所有參數(shù)返回的功能。4.2函數(shù)的高級(jí)用法1(3)這時(shí)可以使用Python遍歷的方式獲取每一個(gè)參數(shù)的值,代碼如下:foriteminnames:print(item)運(yùn)行該代碼,輸出結(jié)果如圖4.10所示。4.2函數(shù)的高級(jí)用法1

(4)也可以使用位置來分別獲取可變參數(shù)中的第一個(gè)值和最后一個(gè)值,代碼如下:print(names[0])print(names[-1])運(yùn)行該代碼,輸出結(jié)果如圖4.11所示。4.2函數(shù)的高級(jí)用法13.結(jié)合位置實(shí)參與任意實(shí)參

如果要讓函數(shù)接收不同類型的實(shí)參,必須在函數(shù)定義中將接收任意數(shù)量實(shí)參的形參放在參數(shù)列表中最后的位置,Python會(huì)先匹配位置實(shí)參和關(guān)鍵字實(shí)參,再將余下的實(shí)參都收集到最后一個(gè)形參中。詳情見示例4.7。

【示例4.7】定義一個(gè)接收單個(gè)實(shí)參和多個(gè)形參的函數(shù),它實(shí)現(xiàn)將實(shí)參與形參分別打印的效果。deffunc_arg_args(items_class,*itmes):print('函數(shù)的實(shí)參是:',items_class)print('函數(shù)的形參是:',itmes)func_arg_args('animal','cat','dog','rat')運(yùn)行該代碼,輸出結(jié)果如圖4.12所示。4.2函數(shù)的高級(jí)用法2

結(jié)合循環(huán)使用函數(shù)

可以將函數(shù)與任何Python結(jié)構(gòu)結(jié)合起來使用,最常用的方式是將函數(shù)與while循環(huán)結(jié)合起來使用,詳細(xì)代碼見示例4.8。【示例4.8】(1)定義一個(gè)函數(shù),代碼如下:defsay_hello(name):

return'Hello,'+name.title()

(2)將while循環(huán)與上述函數(shù)結(jié)合起來,每當(dāng)用戶輸入姓名后,返回一個(gè)歡迎的語句,代碼如下:whileTrue:

name=input('請(qǐng)輸入的姓名:')

print(say_hello(name)4.2函數(shù)的高級(jí)用法2

結(jié)合循環(huán)使用函數(shù)運(yùn)行該代碼,輸出結(jié)果如圖4.13所示。

此循環(huán)存在一個(gè)問題,在用戶輸入一系列名字后,沒有提供終止程序的方法,因此應(yīng)該將此程序進(jìn)行改寫,在提示用戶輸入時(shí),先判斷是否要退出該程序。4.2函數(shù)的高級(jí)用法2

結(jié)合循環(huán)使用函數(shù)(3)改進(jìn)while循環(huán),提供終止的相關(guān)方法,代碼如下:whileTrue:name=input('請(qǐng)輸入的姓名(鍵入“q”來退出該程序):')ifname=='q':breakelse:print(say_hello(name))運(yùn)行該代碼,輸出結(jié)果如圖4.14所示。

在上述代碼中,提示用戶輸入姓名前,告訴用戶使用q鍵來終止程序運(yùn)行,然后將接收到的用戶輸入進(jìn)行判斷,一旦判斷是q,則使用break語句退出程序。4.2函數(shù)的高級(jí)用法3函數(shù)模塊中的調(diào)用

函數(shù)的優(yōu)點(diǎn)之一是使用它們可將代碼塊與主程序分離,從而降低它們之間的耦合性。通過給函數(shù)指定描述名稱,可讓主程序更容易理解。還有一種更高級(jí)的用法是將函數(shù)儲(chǔ)存在被稱為模塊的獨(dú)立文件中,再將模塊導(dǎo)入主程序中,import語句允許在當(dāng)前運(yùn)行的程序文件中使用模塊中的代碼。

通過將函數(shù)存儲(chǔ)在獨(dú)立的文件中,可以隱藏程序代碼的細(xì)節(jié),將重點(diǎn)放在程序的主要邏輯之上,而且,一旦將函數(shù)存儲(chǔ)在獨(dú)立的文件中后,可與其他開發(fā)者共享這些文件而不是整個(gè)程序,詳見示例4.9?!臼纠?.9】

(1)編譯一個(gè)my_func.py的文件,該文件內(nèi)主要包含兩個(gè)函數(shù),分別是get_detail()函數(shù)和say_hello()函數(shù),代碼如下:defget_detail(arg,*args):

print('輸入的類別是:',arg)

foriteminargs:

print('-',item)

defsay_hello(name):

print('Hello,',name.title())4.2函數(shù)的高級(jí)用法3函數(shù)模塊中的調(diào)用

(2)在my_func.py文件所在的目錄內(nèi)再新建一個(gè)use_func.py的函數(shù),然后使用import語句將my_func模塊導(dǎo)入,并嘗試調(diào)用my_func中定義的函數(shù),代碼如下:importmy_funcmy_func.get_detail('animals','cat','dog','rat')my_func.say_hello('tom')

在上述代碼中,首先導(dǎo)入了之前定義的函數(shù)模塊,然后使用“模塊名.函數(shù)名”的方式傳遞參數(shù),運(yùn)行該代碼,輸出結(jié)果如圖4.15所示。從輸出結(jié)果中可知,它實(shí)現(xiàn)了模塊之間的函數(shù)調(diào)用。4.2函數(shù)的高級(jí)用法3函數(shù)模塊中的調(diào)用(3)改寫use_func.py,實(shí)現(xiàn)導(dǎo)入特定的函數(shù),代碼如下:frommy_funcimportget_detailget_detail('animals','cat','dog','rat')

在上述代碼中,在導(dǎo)入函數(shù)模塊時(shí),使用了“from模塊名import函數(shù)名”的方式導(dǎo)入了模塊中的函數(shù),在使用函數(shù)時(shí)就無須指定該函數(shù)的模塊,直接使用函數(shù)名完成函數(shù)的調(diào)用。運(yùn)行以上代碼,輸出結(jié)果如圖4.16所示。

【注意】這里僅導(dǎo)入了my_func模塊中的get_detail()函數(shù),而模塊中的say_hello()函數(shù)并未導(dǎo)入,如果調(diào)用say_hello()函數(shù)就會(huì)報(bào)錯(cuò)。4.2函數(shù)的高級(jí)用法3函數(shù)模塊中的調(diào)用

(4)可以使用as來對(duì)模塊起別名,如使用語句“import模塊名as別名”來實(shí)現(xiàn)。例如重寫use_func.py,代碼如下:importmy_funcasff.get_detail('animals','bird','fish','lion')f.say_hello('tom')

在上述代碼中,導(dǎo)入了函數(shù)模塊my_func,并且為該函數(shù)模塊起別名為f,之后,想要調(diào)用該模塊中的函數(shù),使用“別名.函數(shù)名”的方式就可以完成函數(shù)的調(diào)用。

運(yùn)行以上代碼,輸出結(jié)果如圖4.17所示。4.2函數(shù)的高級(jí)用法4函數(shù)模塊中的調(diào)用

(5)給函數(shù)指定別名,重寫use_func.py文件,使用語句“from模塊名import函數(shù)名as別名”的方式完成函數(shù)的調(diào)用,代碼如下:frommy_funcimportsay_helloasss('jerry')

上述代碼,在模塊my_func中導(dǎo)入了say_hello()函數(shù),并給該函數(shù)起別名為s,在調(diào)用時(shí)直接使用s()函數(shù)即可。

運(yùn)行以上代碼,輸出結(jié)果如圖4.18所示。觀察輸出結(jié)果,可以發(fā)現(xiàn)它同樣可以正常完成函數(shù)的調(diào)用。4.2函數(shù)的高級(jí)用法5學(xué)生實(shí)踐練習(xí)1.需求說明

模擬銀行賬戶存取款及查看余額功能,分別定義函數(shù)實(shí)現(xiàn)銀行賬戶存款、取款及查看余額功能??梢允褂脜?shù)和返回值進(jìn)行數(shù)據(jù)傳遞。初步設(shè)定賬戶的余額為10000元,效果如圖4.19所示。2.實(shí)現(xiàn)思路

(1)將賬戶信息(用戶名和余額)保存在一個(gè)字典的對(duì)象中。

(2)定義3個(gè)函數(shù),分別用于實(shí)現(xiàn)存款、取款及查看余額的功能,運(yùn)行結(jié)果如圖4.19所示。知識(shí)架構(gòu)4.3字符串與集合函數(shù)1234字符串的定義字符串的常用函數(shù)集合類操作函數(shù)學(xué)生實(shí)踐練習(xí)4.3字符串與集合函數(shù)1

字符串的定義

字符串是Python中最常用的數(shù)據(jù)類型,可以使用引號(hào)(單引號(hào)'或雙引號(hào)")來創(chuàng)建字符串。創(chuàng)建字符串很簡(jiǎn)單,只要為變量分配一個(gè)值即可?!菊Z法】變量名='字符串的值'變量名="字符串的值"字符串的使用示例如下:var1='HelloWorld!'var2="PythonRunoob"

Python訪問子字符串,可以使用方括號(hào)來截取字符串。使用“變量[頭下標(biāo):尾下標(biāo)]”的方式,就可以截取相應(yīng)的字符串,從左到右索引默認(rèn)從0開始,從右到左索引默認(rèn)從?1開始,下標(biāo)可以為空,表示取到頭或尾。

Python支持格式化字符串的輸出。盡管這樣可能會(huì)用到非常復(fù)雜的表達(dá)式,但最基本的用法是將一個(gè)值插入到一個(gè)有字符串格式符%s的字符串中。在Python中,字符串格式化使用與C語言中的sprintf函數(shù)一致。4.3字符串與集合函數(shù)1

字符串的定義

【示例4.10】獲取字符串中前5個(gè)字符、第3個(gè)到第6個(gè)字符及最后5個(gè)字符的子字符串。var="Helloworld!"print("前5個(gè)字符為",var[:5])print("第3到第6個(gè)字符為",var[3:6])print("最后5個(gè)字符為",var[-5:])print("姓名為%s,年齡為%d"%('James',37))截取字符串的運(yùn)行結(jié)果如圖4.20所示。

通過對(duì)示例4.10進(jìn)行分析可知,可以使用“變量[頭下標(biāo):尾下標(biāo)]”的方式截取字符串中的任意一個(gè)子字符串。4.3字符串與集合函數(shù)1

字符串的定義

Python中定義一個(gè)Unicode字符串和定義一個(gè)普通字符串一樣簡(jiǎn)單,引號(hào)前小寫的“u”表示此處創(chuàng)建的是一個(gè)Unicode字符串。如果想加入一個(gè)特殊字符,可以使用Python的Unicode-Escape編碼,如定義變量“var=u'Hello\u0020World!'”,則變量輸出為“HelloWorld!”。

Python中三引號(hào)可以將復(fù)雜的字符串進(jìn)行復(fù)制。Python三引號(hào)允許一個(gè)字符串跨多行,字符串中可以包含換行符、制表符及其他特殊字符。三引號(hào)讓程序員從引號(hào)和特殊字符串的泥潭中解脫出來,自始至終保持字符串的格式是WYSIWYG(所見即所得)格式的。

當(dāng)需要一個(gè)HTML腳本或者SQL語句時(shí),這時(shí)用字符串組合,特殊字符串轉(zhuǎn)義將會(huì)非常煩瑣,但使用三引號(hào)可以輕松地解決該問題?!菊Z法】變量名="""字符串內(nèi)容"""變量名='''字符串內(nèi)容'''如定義一個(gè)HTML格式的字符串,代碼如下:html='''<INPUTTYPE=buttonVALUE=BackONCLICK="window.history.back()"/>'''4.3字符串與集合函數(shù)2字符串的常用函數(shù)字符串提供了很多內(nèi)置的函數(shù),詳情見表4.1。4.3字符串與集合函數(shù)2字符串的常用函數(shù)【示例4.11】給定一段字符串,從這段字符串中解析出時(shí)間的字符串。html='''<divclass="about">

2017-08-0214:44:35<br/>

來源:中國(guó)臺(tái)州網(wǎng)<br/>'''lindex=html.find('class="about">')#查找class="about">在字符串的位置str_len=len('class="about">')brIndex=html.find('<br/>')#查找<br/>在字符串的位置timestr=html[lindex+str_len:brIndex]timestr=timestr.strip()#去除字符串兩邊的空格print(timestr)解析時(shí)間字符串的運(yùn)行結(jié)果如圖4.21所示。4.3字符串與集合函數(shù)3集合類型操作函數(shù)

由于集合本身是無序的,所以不能為集合創(chuàng)建索引或切片操作,只能循環(huán)遍歷或使用in、notin來訪問或判斷集合元素,也可以通過等價(jià)(==)和不等價(jià)(!=)判斷兩個(gè)集合是否相等。

集合提供了一系列的函數(shù)用于添加、刪除和修改元素,詳情見表4.2。4.3字符串與集合函數(shù)3集合類型操作函數(shù)集合還提供了其他操作符,其中包括以下4種操作符。

(1)聯(lián)合(|):聯(lián)合(Union)操作與集合的or操作其實(shí)是等價(jià)的,聯(lián)合符號(hào)等價(jià)于union()方法。如果有兩個(gè)集合s1和s2,則集合s1和s2的聯(lián)合為s3=s1|s2或者s3=s1.union(s2)。

(2)交集(&):與集合and等價(jià),交集符號(hào)等價(jià)于intersection()方法。

(3)查補(bǔ)(-):等價(jià)于difference()方法。

(4)對(duì)稱差分(^):對(duì)稱差分是集合的xor(異或),取得的元素屬于s1、s2但不同時(shí)屬于s1和s2,等價(jià)于symmetric_difference()方法?!菊f明】集合、列表、元組和字符串之間可以互相進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換方法如下:(1)list(s1):將集合s1轉(zhuǎn)化為列表。(2)str(s1):將集合s1轉(zhuǎn)化為字符串。(3)tuple(s1):將集合s1轉(zhuǎn)化為元組。4.3字符串與集合函數(shù)3集合類型操作函數(shù)【示例4.12】給定兩個(gè)集合,并求這兩個(gè)集合的并集。s1=set([3,5,8])s1.add(9)#添加一個(gè)元素foriins1:#訪問集合s1的所有元素

print(i,"\t")s2=set([5,11,13])print(s1.difference(s2))#查找集合s1和集合s2不同的元素print(s1|s2)#計(jì)算集合s1和集合s2的并集集合操作的運(yùn)行結(jié)果如圖4.22所示。a4.3字符串與集合函數(shù)4學(xué)生實(shí)踐練習(xí)1.需求說明2.實(shí)現(xiàn)思路

(1)將小明和小王的愛好列表分別保存在兩個(gè)集合中。

(2)通過集合的并集和交集等函數(shù)得到兩人共同的愛好、兩個(gè)人所有的愛好及小明有的但小王沒有的愛好。

小明和小王都有不同的愛好,在控制臺(tái)分別輸入小明和小王的愛好列表(多個(gè)愛好之間使用“,”分隔),分別輸出兩人共同的愛好、兩個(gè)人所有的愛好及小明有的但小王沒有的愛好。知識(shí)架構(gòu)4.4常用函數(shù)12354print()函數(shù)join()函數(shù)與split()函數(shù)enumerate()函數(shù)與zip()函數(shù)lambda函數(shù)學(xué)生實(shí)踐練習(xí)4.4常用函數(shù)1print()函數(shù)

無論什么類型,如數(shù)值、布爾、列表及字典等都可以使用print()函數(shù)進(jìn)行輸出。在Python2.x版本中使用print()函數(shù)可以不用加括號(hào),而在Python3.x版本中必須加括號(hào)才能使用。

print()函數(shù)支持格式化的輸出,如print("Nameis%s,Ageis%d"%("James",35))。格式化輸出包括以下幾點(diǎn):

(1)%字符:標(biāo)記轉(zhuǎn)換說明符的開始。

(2)轉(zhuǎn)換標(biāo)志:“-”表示左對(duì)齊;“+”表示在轉(zhuǎn)換值之前要加上正負(fù)號(hào);“”(空白字符)表示正數(shù)之前保留空格;0表示轉(zhuǎn)換值,若位數(shù)不夠,則用0填充。

(3)最小字段寬度:轉(zhuǎn)換后的字符串至少應(yīng)該具有該值指定的寬度。如果是*,則寬度會(huì)從值元組中讀出。

(4)點(diǎn)(.)后跟精度值:如果轉(zhuǎn)換的是實(shí)數(shù),精度值就表示出現(xiàn)在小數(shù)點(diǎn)后的位數(shù)。如果轉(zhuǎn)換的是字符串,那么該數(shù)字就表示最大字段寬度。如果是*,那么精度將從元組中讀出。

(5)字符串格式化轉(zhuǎn)換類型,格式化轉(zhuǎn)換類型見表4.3。4.4常用函數(shù)1print()函數(shù)4.4常用函數(shù)1print()函數(shù)【示例4.13】實(shí)現(xiàn)各種格式的字符串輸出。pi=3.141592653print("姓名為%s,年齡為%d"%("Paul",32))print('%10.3f'%pi)#字段寬10,精度3print("pi=%.*f"%(3,pi))#用*從后面的元組中讀取字段寬度或精度print('%010.3f'%pi)#用0填充空白print('%-10.3f'%pi)#左對(duì)齊print('%+f'%pi)#顯示正負(fù)號(hào)forxinrange(0,10):

print(x)#不換行輸出

print()函數(shù)的運(yùn)行結(jié)果如圖4.24所示。4.4常用函數(shù)2join()函數(shù)與split()函數(shù)

如果有一個(gè)字符串列表,需要將它們連接起來,成為一個(gè)獨(dú)立的字符串,join()函數(shù)就很有用。join()函數(shù)在一個(gè)字符串上調(diào)用,其參數(shù)是一個(gè)字符串列表,返回一個(gè)字符串。返回的字符串由傳入的列表中每個(gè)字符串連接而成。與join()函數(shù)相反的是split()函數(shù),它針對(duì)一個(gè)字符串調(diào)用,返回一個(gè)字符串列表?!臼纠?.14】join()函數(shù)與split()函數(shù)的用法示例。(1)使用join()函數(shù),將不同元素組合在一起,代碼如下:habits=['游泳','跑步','閱讀','騎車']habits_str='、'.join(habits)print('我的愛好是:'+habits_str)4.4常用函數(shù)2join()函數(shù)與split()函數(shù)運(yùn)行該代碼,輸出結(jié)果如圖4.25所示。

【說明】join()函數(shù)是針對(duì)一個(gè)字符串而調(diào)用的,并且傳入一個(gè)列表值,使用join()函數(shù)的字符串被插入到列表參數(shù)中每個(gè)元素的中間。4.4常用函數(shù)2join()函數(shù)與split()函數(shù)

(2)使用split()函數(shù),將字符串切分成不同的部分,然后放入一個(gè)列表中,代碼如下:sentence="我的愛好是:游泳、跑步、閱讀、騎車"front,end=sentence.split(':')habit=end.split('、')print(habit)運(yùn)行該代碼,輸出結(jié)果如圖4.26所示。

【說明】在上述代碼中,通過兩次使用split()函數(shù)將“愛好”切分出來并放置在同一個(gè)列表中。split()函數(shù)在數(shù)據(jù)分析與爬蟲中使用得非常多,應(yīng)著重掌握。4.4常用函數(shù)3enumerate()函數(shù)和zip()函數(shù)

在Python中,enumerate()函數(shù)與zip()函數(shù)是兩個(gè)常用的函數(shù),它們的功能都是將兩個(gè)列表組合在一起,經(jīng)常將組合后的結(jié)果放置在一個(gè)字典中,方便后續(xù)處理。1.enumerate()函數(shù)

該函數(shù)在字面上是枚舉、列舉的意思,用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串等)組合成一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在for循環(huán)當(dāng)中,可以同時(shí)得到數(shù)據(jù)對(duì)象的值及對(duì)應(yīng)的索引值,詳情見示例4.15。

【示例4.15】將列表中的所有元素與其對(duì)應(yīng)的索引值組成鍵值對(duì)放入一個(gè)字典內(nèi),打印字典的內(nèi)容。habits=['游泳','跑步','閱讀','騎車']my_dict={}fori,habitinenumerate(habits):

my_dict.setdefault(i,habit)print(my_dict)4.4常用函數(shù)3enumerate()函數(shù)和zip()函數(shù)運(yùn)行該代碼,輸出結(jié)果如圖4.27所示。

從輸出結(jié)果可知,使用enumerate()函數(shù)將原有列表中的各元素與對(duì)應(yīng)的索引組合在了一起,最后放入字典中,在后續(xù)的業(yè)務(wù)邏輯中,可以多樣地處理各自元素。4.4常用函數(shù)3enumerate()函數(shù)和zip()函數(shù)2.zip()函數(shù)

該函數(shù)用于將多個(gè)可迭代對(duì)象作為參數(shù),依次將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的對(duì)象,與enumerate()函數(shù)一樣,一般也用在for循環(huán)中,詳情見示例4.16。

【示例4.16】處理三個(gè)列表,將它們的內(nèi)容放在一個(gè)字典內(nèi)。其中第一個(gè)列表作為鍵,后兩個(gè)列表將內(nèi)容拼接作為值。names=['張三','李四','王五','趙六']sexs=['男','女','男','女']habits=['游泳','跑步','閱讀','騎車']new_dict={}forname,sex,habitinzip(names,sexs,habits):

new_dict.setdefault(name,sex+','+habit)print(new_dict)4.4常用函數(shù)3enumerate()函數(shù)和zip()函數(shù)運(yùn)行該代碼,輸出結(jié)果如圖4.28所示。從輸出結(jié)果可知,通過zip()函數(shù)實(shí)現(xiàn)了多列表的組合。4.4常用函數(shù)4lambda匿名函數(shù)

lambda是Python編程語言中使用頻率較高的一個(gè)關(guān)鍵字。lambda是Python預(yù)留的關(guān)鍵字,它的語法如下所示。lambdaargument_list:expression

這里的argument_list是參數(shù)列表,它的結(jié)構(gòu)與Python中函數(shù)(Function)的參數(shù)列表是一樣的。expression是一個(gè)關(guān)于參數(shù)的表達(dá)式。表達(dá)式中出現(xiàn)的參數(shù)需要在argument_list中有定義,并且表達(dá)式只能是單行的。

lambda函數(shù)有以下三個(gè)特性:

(1)lambda函數(shù)是匿名的。所謂匿名函數(shù),通俗地說就是沒有名字的函數(shù)。

(2)lambda函數(shù)有輸入和輸出。輸入的是傳入?yún)?shù)列表argument_list的值,輸出的是根據(jù)表達(dá)式expression計(jì)算得到的值。

(3)lambda函數(shù)一般功能簡(jiǎn)單。單行expression決定了lambda函數(shù)不可能完成復(fù)雜的邏輯,只能完成非常簡(jiǎn)單的功能。由于其實(shí)現(xiàn)的功能一目了然,甚至不需要專門的名字來說明。4.4常用函數(shù)4lambda匿名函數(shù)

由于lambda語法是固定的,其本質(zhì)上只有一種用法,那就是定義一個(gè)lambda函數(shù)。在實(shí)際中,根據(jù)lambda函數(shù)應(yīng)用場(chǎng)景的不同,可以將lambda函數(shù)的用法擴(kuò)展為以下4種,分別是:

(1)將lambda函數(shù)賦值給一個(gè)變量,通過這個(gè)變量間接調(diào)用lambda函數(shù)。

(2)將lambda函數(shù)賦值給其他函數(shù),從而將其他函數(shù)用該lambda函數(shù)替換。

(3)將lambda函數(shù)作為其他函數(shù)的返回值,返回給調(diào)用者。

(4)將lam

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論