《Python與數(shù)據(jù)分析應(yīng)用》課件-第6章 函數(shù)_第1頁(yè)
《Python與數(shù)據(jù)分析應(yīng)用》課件-第6章 函數(shù)_第2頁(yè)
《Python與數(shù)據(jù)分析應(yīng)用》課件-第6章 函數(shù)_第3頁(yè)
《Python與數(shù)據(jù)分析應(yīng)用》課件-第6章 函數(shù)_第4頁(yè)
《Python與數(shù)據(jù)分析應(yīng)用》課件-第6章 函數(shù)_第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)介

第六章

函數(shù)在此輸入副標(biāo)題·

函數(shù)的定義和調(diào)用·函數(shù)參數(shù)的傳遞·函數(shù)的返回值·變量作用域·特殊形式的函數(shù)了解掌握熟悉理解

1234學(xué)習(xí)目標(biāo)了解

函數(shù)的概念及優(yōu)勢(shì)掌握

局部變量和全局變量、遞歸函數(shù)和匿名函數(shù)熟悉函數(shù)的定義和使用、函數(shù)參數(shù)的傳遞理解

變量作用域目錄CONTENTS6.16.26.36.46.56.6函數(shù)概述函數(shù)的定義和使用函數(shù)的返回值函數(shù)參數(shù)的傳遞變量作用域

特殊形式的函數(shù)

第一部分PART016.1函數(shù)概述函數(shù)是組織好的、實(shí)現(xiàn)單一功能或相關(guān)聯(lián)功能的代碼段。我們可以將函數(shù)視為一段有名字的代碼,這類代碼可以在需要的地方以“函數(shù)名()”的形式調(diào)用。print()input()6.1函數(shù)概述

(a)未使用函數(shù)的程序(b)使用函數(shù)的程序結(jié)構(gòu)清晰代碼精簡(jiǎn)6.1函數(shù)概述程序若希望再打印一個(gè)邊長(zhǎng)為5個(gè)星號(hào)的正方形,應(yīng)該如何解決呢?6.1函數(shù)概述冗余代碼繼續(xù)增加再次調(diào)用函數(shù)6.1函數(shù)概述6.1函數(shù)概述PART01。PART02PART03將程序模塊化,既減少了冗余代碼,又讓程序結(jié)構(gòu)更為清晰。提高開(kāi)發(fā)人員的編程效率。方便后期的維護(hù)與擴(kuò)展。函數(shù)式編程具有以下優(yōu)點(diǎn):

第二部分PART026.2函數(shù)的定義和調(diào)用前面使用的print()函數(shù)和input()都是Python的內(nèi)置函數(shù),這些函數(shù)由Python定義的。開(kāi)發(fā)人員也可以根據(jù)自己的需求定義函數(shù),Python中使用關(guān)鍵字def來(lái)定義函數(shù),其語(yǔ)法格式如下:標(biāo)記函數(shù)的開(kāi)始函數(shù)的唯一標(biāo)識(shí)傳入函數(shù)中的數(shù)據(jù)可以包含一個(gè)或多個(gè)參數(shù)也可以為空標(biāo)記函數(shù)體的開(kāi)始實(shí)現(xiàn)函數(shù)功能的具體代碼返回函數(shù)的處理結(jié)果給調(diào)用者標(biāo)志著函數(shù)的結(jié)束若函數(shù)沒(méi)有返回值,可以省略6.2.1定義函數(shù)例如,定義一個(gè)計(jì)算兩個(gè)數(shù)之和的函數(shù),代碼如下:defadd():

result=11+22

print(result)defadd_modify(a,b):

result=a+b

print(result)無(wú)參函數(shù)有參函數(shù)6.2.1定義函數(shù)函數(shù)在定義完成后不會(huì)立刻執(zhí)行,直到被程序調(diào)用時(shí)才會(huì)執(zhí)行。語(yǔ)法格式如下:add()add_modify(10,20)例如函數(shù)名([參數(shù)列表])調(diào)用過(guò)程1.程序在調(diào)用函數(shù)的位置暫停執(zhí)行。2.將數(shù)據(jù)傳遞給函數(shù)參數(shù)。3.執(zhí)行函數(shù)體中的語(yǔ)句。4.程序回到暫停處繼續(xù)執(zhí)行。6.2.2調(diào)用函數(shù)函數(shù)內(nèi)部也可以調(diào)用其他函數(shù),這被稱為函數(shù)的嵌套調(diào)用。6.2.2調(diào)用函數(shù)defadd_modify(a,b):

result=a+b

add() print(result)add_modify(10,20)例如嵌套調(diào)用函數(shù)add()調(diào)用過(guò)程函數(shù)在定義時(shí)可以在其內(nèi)部嵌套定義另外一個(gè)函數(shù),此時(shí)嵌套的函數(shù)稱為外層函數(shù),被嵌套的函數(shù)稱為內(nèi)層函數(shù)。函數(shù)外部無(wú)法直接調(diào)用內(nèi)層函數(shù)只能通過(guò)外層函數(shù)間接調(diào)用內(nèi)層函數(shù)注意內(nèi)嵌函數(shù)defadd_modify(a,b):

result=a+b

print(result)

deftest():print("我是內(nèi)層函數(shù)")add_modify(10,20)例如多學(xué)一招:函數(shù)的嵌套定義

第三部分PART036.3函數(shù)參數(shù)的傳遞6.3函數(shù)參數(shù)的傳遞函數(shù)參數(shù)的傳遞

我們通常將定義函數(shù)時(shí)設(shè)置的參數(shù)稱為形式參數(shù)(簡(jiǎn)稱為形參),將調(diào)用函數(shù)時(shí)傳入的參數(shù)稱為實(shí)際參數(shù)(簡(jiǎn)稱為實(shí)參)。函數(shù)的參數(shù)傳遞是指將實(shí)際參數(shù)傳遞給形式參數(shù)的過(guò)程。

函數(shù)參數(shù)的傳遞可以分為位置參數(shù)傳遞、關(guān)鍵字參數(shù)傳遞、默認(rèn)參數(shù)傳遞、參數(shù)的打包與解包以及混合傳遞。函數(shù)參數(shù)的傳遞函數(shù)在被調(diào)用時(shí)會(huì)將實(shí)參按照相應(yīng)的位置依次傳遞給形參,也就是說(shuō)將第一個(gè)實(shí)參傳遞給第一個(gè)形參,將第二個(gè)實(shí)參傳遞給第二個(gè)形參,以此類推。defget_max(a,b):ifa>b:

print(a,"是較大的值!")

else:

print(b,"是較大的值!")get_max(8,5)8是較大的值6.3.1位置參數(shù)的傳遞關(guān)鍵字參數(shù)的傳遞是通過(guò)“形參=實(shí)參”的格式將實(shí)參與形參相關(guān)聯(lián),將實(shí)參按照相應(yīng)的關(guān)鍵字傳遞給形參。6.3.2關(guān)鍵字參數(shù)的傳遞注意:在函數(shù)調(diào)用時(shí),如果有位置參數(shù),位置參數(shù)必須在關(guān)鍵字參數(shù)的前面,但關(guān)鍵字參數(shù)之間不存在先后順序。defconnect(ip,port):print(f"設(shè)備{ip}:{port}連接!")connect(ip="127.0.0.1",port=8080)無(wú)論實(shí)參采用位置參數(shù)的方式傳遞,還是關(guān)鍵字參數(shù)的方式傳遞,每個(gè)形參都是有名稱的,怎么區(qū)分用哪種方式傳遞呢?符號(hào)“/”6.3.2關(guān)鍵字參數(shù)的傳遞Python在3.8之后版本中新增了僅限位置形參的語(yǔ)法,使用符號(hào)“/”來(lái)限定部分形參只接收采用位置傳遞方式的實(shí)參。deffunc(a,b,/,c):

print(a,b,c)例如:#錯(cuò)誤的調(diào)用方式#func(a=10,20,30)#func(10,b=20,30)#正確的調(diào)用方式func(10,20,c=30)6.3.2關(guān)鍵字參數(shù)的傳遞函數(shù)在定義時(shí)可以指定形參的默認(rèn)值,因此在被調(diào)用時(shí)可以選擇是否給帶有默認(rèn)值的形參傳值,若沒(méi)有給帶有默認(rèn)值的形參傳值,則直接使用該形參的默認(rèn)值。defconnect(ip,port=8080):

print(f"設(shè)備{ip}:{port}連接!")定義connect(ip="127.0.0.1")connect(ip="127.0.0.1",port=3306)調(diào)用設(shè)備127.0.0.1:8080連接!設(shè)備127.0.0.1:3306連接!結(jié)果6.3.3默認(rèn)參數(shù)的傳遞默認(rèn)參數(shù)就是在定義函數(shù)時(shí)設(shè)定了默認(rèn)值的參數(shù)。默認(rèn)參數(shù)要寫在位置參數(shù)和關(guān)鍵字參數(shù)的后面。參數(shù)的順序依次是:位置參數(shù)、關(guān)鍵字參數(shù)、默認(rèn)參數(shù)。如果沒(méi)有給默認(rèn)參數(shù)傳遞數(shù)據(jù),則直接使用默認(rèn)值;如果給默認(rèn)參數(shù)傳遞數(shù)據(jù),則使用傳遞的數(shù)據(jù)。在給默認(rèn)參數(shù)傳遞數(shù)據(jù)的時(shí)候,可以用位置參數(shù)的方式,也可以用關(guān)鍵字參數(shù)的方式。6.3.3默認(rèn)參數(shù)的傳遞位置參數(shù)關(guān)鍵字參數(shù)默認(rèn)參數(shù)不定長(zhǎng)參數(shù)不定長(zhǎng)參數(shù)的傳遞方式:第一類是包裹位置傳遞,為了接收所有不確定個(gè)數(shù)的位置參數(shù);第二類是包裹關(guān)鍵字傳遞,為了接收所有不確定個(gè)數(shù)的關(guān)鍵字參數(shù)。6.3.4參數(shù)的打包與解包不定長(zhǎng)參數(shù):也叫可變參數(shù),指的是不設(shè)定個(gè)數(shù)的參數(shù),它用于在調(diào)用函數(shù)時(shí)會(huì)傳入不確定個(gè)數(shù)實(shí)際參數(shù)的場(chǎng)景。函數(shù)支持將實(shí)參以打包或者解包的方式傳遞給形參。如果函數(shù)在定義時(shí)無(wú)法確定需要接收多少個(gè)數(shù)據(jù),那么可以在定義函數(shù)時(shí)為形參添加“*”或“**”:“*”——接收以元組形式打包的多個(gè)值“**”——接收以字典形式打包的多個(gè)值6.3.4參數(shù)的打包與解包1.打包1.打包——“*”deftest(*args):

print(args)定義test(11,22,33,44,55)調(diào)用(11,22,33,44,55)結(jié)果6.3.4參數(shù)的打包與解包1.打包——“**”deftest(**kwargs):

print(kwargs)定義test(a=11,b=22,c=33,d=44,e=55)調(diào)用{'a':11,'b':22,'c':33,'d':44,'e':55}結(jié)果6.3.4參數(shù)的打包與解包雖然函數(shù)中添加“*”或“**”的形參可以是符合命名規(guī)范的任意名稱,但這里建議使用*args和**kwargs。若函數(shù)沒(méi)有接收到任何數(shù)據(jù),參數(shù)*args和**kwargs為空,即它們?yōu)榭赵M或空字典。6.3.4參數(shù)的打包與解包1.打包——“**”實(shí)參是元組

→可以使用“*”拆分成多個(gè)值

→按位置參數(shù)傳給形參實(shí)參是字典→可以使用“**”拆分成多個(gè)鍵值對(duì)

→按關(guān)鍵字參數(shù)傳給形參6.3.4參數(shù)的打包與解包2.解包deftest(a,b,c,d,e):

print(a,b,c,d,e)定義nums=(11,22,33,44,55)test(*nums)調(diào)用112233

4455結(jié)果6.3.4參數(shù)的打包與解包2.解包deftest(a,b,c,d,e):

print(a,b,c,d,e)定義nums={"a":11,"b":22,"c":33,"d":44,"e":55}test(**nums)調(diào)用1122334455結(jié)果6.3.4參數(shù)的打包與解包2.解包前面介紹的參數(shù)傳遞的方式在定義函數(shù)或調(diào)用函數(shù)時(shí)可以混合使用,但是需要遵循一定的規(guī)則,具體規(guī)則如下。優(yōu)先按位置參數(shù)傳遞的方式。然后按關(guān)鍵字參數(shù)傳遞的方式。之后按默認(rèn)參數(shù)傳遞的方式。最后按打包傳遞的方式。6.3.5混合傳遞6.3.5混合傳遞010203帶有默認(rèn)值的參數(shù)必須位于普通參數(shù)之后。帶有“*”標(biāo)識(shí)的參數(shù)必須位于帶有默認(rèn)值的參數(shù)之后帶有“**”標(biāo)識(shí)的參數(shù)必須位于帶有“*”標(biāo)識(shí)的參數(shù)之后。在定義函數(shù)時(shí):deftest(a,b,c=33,*args,**kwargs):print(a,b,c,args,kwargs)定義test(1,2)test(1,2,3)test(1,2,3,4)test(1,2,3,4,e=5)調(diào)用1233(){}123(){}123(4,){}123(4,){'e':5}結(jié)果6.3.5混合傳遞

第四部分PART046.4函數(shù)的返回值函數(shù)中的return語(yǔ)句會(huì)在函數(shù)結(jié)束時(shí)將數(shù)據(jù)返回給程序,同時(shí)讓程序回到函數(shù)被調(diào)用的位置繼續(xù)執(zhí)行。6.4函數(shù)的返回值deffilter_sensitive_words(words):

if"山寨"inwords:

new_words=words.replace("山寨","**")

returnnew_words定義result=filter_sensitive_words("這個(gè)手機(jī)是山寨版吧!")print(result)調(diào)用這個(gè)手機(jī)是**版吧!結(jié)果6.4函數(shù)的返回值如果函數(shù)使用return語(yǔ)句返回了多個(gè)值,那么這些值將被保存到元組中。6.4函數(shù)的返回值defmove(x,y,step):

nx=x+step

ny=y-step

returnnx,ny#使用return語(yǔ)句返回多個(gè)值定義result=move(100,100,60) print(result)調(diào)用(160,40)結(jié)果6.4函數(shù)的返回值

第五部分PART056.5變量作用域6.5變量作用域變量并非在程序的任意位置都可以被訪問(wèn),其訪問(wèn)權(quán)限取決于變量定義的位置,其所處的有效范圍稱為變量的作用域。根據(jù)作用域的不同,變量可以劃分為局部變量和全局變量。函數(shù)內(nèi)部定義的變量,只能在函數(shù)內(nèi)部被使用。函數(shù)執(zhí)行結(jié)束之后局部變量會(huì)被釋放,此時(shí)無(wú)法再進(jìn)行訪問(wèn)。6.5.1局部變量和全局變量1.局部變量deftest_one():

number=10 #局部變量

print(number) #函數(shù)內(nèi)部訪問(wèn)局部變量test_one()print(number) #函數(shù)外部訪問(wèn)局部變量示例6.5.1局部變量和全局變量1.局部變量deftest_one():

number=10

print(number)#訪問(wèn)test_one()函數(shù)的局部變量numberdeftest_two():

number=20

print(number)#訪問(wèn)test_two()函數(shù)的局部變量numbertest_one()test_two()示例不同函數(shù)內(nèi)部可以包含同名的局部變量,這些局部變量的關(guān)系類似于不同目錄下同名文件的關(guān)系,它們相互獨(dú)立,互不影響。1020結(jié)果6.5.1局部變量和全局變量1.局部變量全局變量可以在整個(gè)程序的范圍內(nèi)起作用,它不會(huì)受到函數(shù)范圍的影響。6.5.1局部變量和全局變量2.全局變量number=10 #全局變量deftest_one():

print(number) #函數(shù)內(nèi)部訪問(wèn)全局變量test_one()print(number) #函數(shù)外部訪問(wèn)全局變量示例1010結(jié)果6.5.1局部變量和全局變量2.全局變量#定義全局變量number=10deftest_one():

print(number)

number+=1test_one()print(number)示例全局變量在函數(shù)內(nèi)部只能被訪問(wèn),而無(wú)法直接修改。已經(jīng)聲明6.5.1局部變量和全局變量2.全局變量沒(méi)有找到這是因?yàn)楹瘮?shù)內(nèi)部的變量number視為局部變量,而在執(zhí)行“number+=1”這行代碼之前并未聲明過(guò)局部變量number。函數(shù)內(nèi)部只能訪問(wèn)全局變量,而無(wú)法直接修改全局變量。6.5.1局部變量和全局變量2.全局變量6.5.2global和nonlocal關(guān)鍵字函數(shù)內(nèi)部無(wú)法直接修改全局變量或在嵌套函數(shù)的外層函數(shù)聲明的變量,但可以使用global或nonlocal關(guān)鍵字修飾變量以間接修改以上變量。number=10#定義全局變量deftest_one():

globalnumber#使用global聲明變量number為全局變量

number+=1

print(number)test_one()print(number)示例使用global關(guān)鍵字可以將局部變量聲明為全局變量,其使用方法如下:global變量1111結(jié)果6.5.2global和nonlocal關(guān)鍵字1.global關(guān)鍵字deftest():

number=10

deftest_in():

nonlocalnumber

number=20

test_in()

print(number)test()示例使用nonlocal關(guān)鍵字可以在局部作用域中修改嵌套作用域中定義的變量,其使用方法如下:nonlocal變量20結(jié)果6.5.2global和nonlocal關(guān)鍵字2.nonlocal關(guān)鍵字

第六部分PART066.6特殊形式的函數(shù)函數(shù)在定義時(shí)可以直接或間接地調(diào)用其他函數(shù)。若函數(shù)內(nèi)部調(diào)用了自身,則這個(gè)函數(shù)被稱為遞歸函數(shù)。6.6.1遞歸函數(shù)6.6.1遞歸函數(shù)遞歸公式AB邊界條件遞歸函數(shù)在定義時(shí)需要滿足兩個(gè)基本條件:一個(gè)是遞歸公式,另一個(gè)是邊界條件。遞歸公式是求解原問(wèn)題或相似的子問(wèn)題的結(jié)構(gòu);邊界條件是最小化的子問(wèn)題,也是遞歸終止的條件。遞歸函數(shù)的執(zhí)行可以分為以下兩個(gè)階段:1.遞推:遞歸本次的執(zhí)行都基于上一次的運(yùn)算結(jié)果。2.回溯:遇到終止條件時(shí),則沿著遞推往回一級(jí)一級(jí)地把值返回來(lái)。遞歸函數(shù)的一般定義格式如下所示:def函數(shù)名([參數(shù)列表]):

if邊界條件:

rerurn結(jié)果

else:

return遞歸公式6.6.1遞歸函數(shù)n!=1*2*3*…*n,可以分為以下兩種情況:1.當(dāng)n=1時(shí),所得的結(jié)果為1。2.當(dāng)n>1時(shí),所得的結(jié)果為n*(n-1)!。階乘n!兔子一般在出生兩個(gè)月之后就有了繁殖能力,每對(duì)兔子每月可以繁殖一對(duì)小兔子,假如所有的兔子都不會(huì)死,試問(wèn)一年以后一共有多少對(duì)兔子?兔子數(shù)列有三根桿子,初始A桿有N個(gè)圓盤,移動(dòng)圓盤到C桿,要求每次只能移動(dòng)一個(gè)圓盤、大盤不能疊在小盤上面。問(wèn)一共需要移動(dòng)多少次?漢諾塔歸并排序是一種基于歸并算法的排序方法,該方法采用分治策略:先將待排序的序列劃分成若干長(zhǎng)度為1的子序列……歸并排序6.6.1遞歸函數(shù)1.遞歸經(jīng)典應(yīng)用n!=1*2*3*…*n,可以分為以下兩種情況:1.當(dāng)n=1時(shí),

溫馨提示

  • 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)論