Python數(shù)據(jù)分析及應(yīng)用 課件 第4章函數(shù)_第1頁
Python數(shù)據(jù)分析及應(yīng)用 課件 第4章函數(shù)_第2頁
Python數(shù)據(jù)分析及應(yīng)用 課件 第4章函數(shù)_第3頁
Python數(shù)據(jù)分析及應(yīng)用 課件 第4章函數(shù)_第4頁
Python數(shù)據(jù)分析及應(yīng)用 課件 第4章函數(shù)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1云南財經(jīng)大學(xué)信息學(xué)院

Python數(shù)據(jù)分析及應(yīng)用第四章函數(shù)目錄

4.1函數(shù)的定義與調(diào)用4.1.1函數(shù)的定義

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

4.2參數(shù)與返回值4.2.1默認(rèn)參數(shù)4.2.2關(guān)鍵字參數(shù)4.2.3可變長參數(shù)4.2.4返回值4.3變量的作用域4.3.1局部變量4.3.2全局變量4.4遞歸(1)知識目標(biāo):掌握函數(shù)的定義及調(diào)用,掌握定義函數(shù)時,如何設(shè)置參數(shù)和返回值,掌握局部變量和全局變量的使用,學(xué)會應(yīng)用遞歸函數(shù)來解決問題。

(2)技能目標(biāo):函數(shù)是編程中非常重要的組成部分,學(xué)會應(yīng)用函數(shù)實現(xiàn)特定功能、提高代碼復(fù)用率、增強程序的可讀性和可維護性。

(3)素質(zhì)目標(biāo):?通過學(xué)習(xí)函數(shù)的定義與使用,掌握如何使用Python解決實際問題,?同時培養(yǎng)邏輯思維和編程能力,?為未來的學(xué)習(xí)和職業(yè)發(fā)展奠定堅實基礎(chǔ)。3學(xué)習(xí)目標(biāo)

函數(shù)的概念最早起源于數(shù)學(xué)領(lǐng)域,用于描述數(shù)學(xué)關(guān)系中的輸入與輸出。隨著計算機科學(xué)的發(fā)展,函數(shù)的概念也被引入到了計算機編程中。編程函數(shù)用于將一組相關(guān)的指令封裝在一起,形成一個可以重復(fù)使用的代碼塊。通過函數(shù),程序員可以更高效地編寫和維護代碼,從而提高代碼的可讀性和可維護性。在Python中,使用函數(shù)可以加強代碼的復(fù)用性、減少代碼冗余,從而提高程序編寫的效率。

本章主要介紹了函數(shù)的概念、函數(shù)的分類及定義、函數(shù)的調(diào)用、返回值、函數(shù)的參數(shù)、變量的作用域及函數(shù)遞歸的使用方法等。

4本章導(dǎo)讀54.1函數(shù)的定義與調(diào)用

在程序設(shè)計里,函數(shù)是用來實現(xiàn)特定功能的可重復(fù)使用的代碼段,是用于構(gòu)建更大、更復(fù)雜程序的部件。在Python中,使用函數(shù)可以加強代碼的復(fù)用性、減少代碼冗余,從而提高程序編寫的效率。

函數(shù)必須先創(chuàng)建(定義)才可以使用,用戶通過調(diào)用函數(shù)名來完成相應(yīng)代碼段的功能,無需關(guān)心具體實現(xiàn)的細(xì)節(jié),只需傳遞參數(shù),得到函數(shù)運行的最終結(jié)果即可。相同的函數(shù)可以在一個或多個程序里多次調(diào)用。舉個例子,譬如:利用凈水器對自來水進行深度處理,假設(shè)把凈水器比作是一個函數(shù),該函數(shù)把一步一步的對水進行過濾處理的過程封裝了起來,用戶無需關(guān)心具體的處理過程,只需要傳遞參數(shù)(自來水),然后讓凈水器自動運行,最終就可獲得處理結(jié)果(凈化后的水)。

4.1函數(shù)的定義與調(diào)用4.1.1函數(shù)的定義Python中的函數(shù)分為:內(nèi)置函數(shù)、自定義函數(shù)和匿名函數(shù)。1.內(nèi)置函數(shù)是系統(tǒng)中預(yù)先定義好的一些常用函數(shù)和方法,這些函數(shù)不需要引用庫,直接使用即可。如:數(shù)學(xué)運算類的函數(shù)(sum()、eval())、IO操作類的函數(shù)(input()、print())、標(biāo)準(zhǔn)庫中的函數(shù)(datetime庫中的today()、now())等。Python的內(nèi)置函數(shù)如表4-1所示。4.1函數(shù)的定義與調(diào)用表4-1Python的內(nèi)置函數(shù)表abs()delattr()hash()memoryview()set()all()dict()help()min()setattr()any()dir()hex()next()slice()ascii()divmod()id()object()sorted()bin()enumerate()input()oct()staticmethod()bool()eval()int()open()str()bytes()exec()isinstance()ord()sum()bytearray()filter()issubclass()pow()super()complex()float()iter()print()tuple()callable()format()len()property()type()chr()frozenset()list()range()vars()classmethod()getattr()locals()repr()zip()compile()globals()map()reversed()__import__()

hasattr()max()round()

4.1函數(shù)的定義與調(diào)用2.自定義函數(shù)是由用戶自己定義的。定義一個函數(shù)要使用def語句,語法格式如下:def函數(shù)名(參數(shù)1,參數(shù)2,...,參數(shù)n):

函數(shù)體(語句塊)

return值def:英文單詞define的簡寫,是定義函數(shù)的關(guān)鍵詞。

函數(shù)名:函數(shù)的名稱,必須符合Python中的命名要求,一般用小寫字母和單下畫線、數(shù)字等組合,如:my_sum、func1等。函數(shù)名后的:(冒號)必不可少。

參數(shù):參數(shù)寫在函數(shù)名后的圓括號里,為函數(shù)體提供數(shù)據(jù),參數(shù)個數(shù)不限,可以是0個,1個或多個。

函數(shù)體:進行一系列邏輯計算的語句塊,相對于def縮進四個空格。

返回值:函數(shù)執(zhí)行完畢后返回給調(diào)用者的數(shù)據(jù)。返回值沒有類型及個數(shù)限制,若有返回值,則使用return結(jié)束函數(shù)并返回值,否則不帶return表達(dá)式相當(dāng)于返回None。Python函數(shù)有兩種類型參數(shù),一種是函數(shù)定義里的形參,一種是調(diào)用函數(shù)時傳入的實參。接下來通過一個簡單的例子,深入理解函數(shù)。4.1函數(shù)的定義與調(diào)用實例4-2編寫程序比較2個數(shù)的大小,輸出2個數(shù)的最大值。(有參函數(shù))defmax(num1,num2):

ifnum1>num2:max=num1

elsemax=num2

returnmaxmax1=max(2,15)print("最大值是:",max1)該程序輸出結(jié)果如下:最大值是:15

在函數(shù)定義階段括號內(nèi)有參數(shù),稱為有參函數(shù),調(diào)用時必須傳入實際參數(shù)。如果函數(shù)體代碼需要依賴外部傳入的值,必須定義為有參函數(shù)。4.1函數(shù)的定義與調(diào)用3.匿名函數(shù)

lambda函數(shù)也稱匿名函數(shù),即沒有函數(shù)名的函數(shù)。lambda只是一個單行的表達(dá)式,函數(shù)體比def簡單很多,其語法結(jié)構(gòu)如下:

lambda參數(shù)1,參數(shù)2,,...參數(shù)N:表達(dá)式

單行表達(dá)式?jīng)Q定了lambda函數(shù)只能完成非常簡單的功能。實例4-3lambda函數(shù)示例f=lambdax,y:x*yf(2,3)6

函數(shù)輸入?yún)?shù)x和y,輸出值是積x*y,并將輸出值賦給變量f,變量f成為具有乘法功能的函數(shù)。

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

函數(shù)在定義的階段不會立即執(zhí)行,而是等函數(shù)被程序調(diào)用時才執(zhí)行。對實例4-2的程序執(zhí)行流程分析如下:

1.程序運行時,首先跳過def塊定義的函數(shù)代碼,而從主程序的第一行,也就是圖中第5行標(biāo)注的max1=max(2,15)這行開始運行,即調(diào)用函數(shù)max。2.程序在調(diào)用處暫停(圖中第5行)執(zhí)行,然后跳轉(zhuǎn)到def定義的函數(shù)體的第一行,并將實參2傳遞給形參num1,實參15傳遞給形參num2,即num1=2,num2=15。4.1函數(shù)的定義與調(diào)用4.1函數(shù)的定義與調(diào)用

3.繼續(xù)執(zhí)行完函數(shù)體中的所有語句,計算出max=15,再跳回到程序暫停處(圖中第5行)繼續(xù)執(zhí)行,將數(shù)值15作為函數(shù)返回值,即max(2,15)=15,得到max1=15。4.繼續(xù)執(zhí)行完主程序中的所有語句,輸出max1。Python函數(shù)必須先定義后調(diào)用,函數(shù)一旦定義后就可以反復(fù)調(diào)用,從而避免代碼冗余。4.2參數(shù)與返回值

4.2.1默認(rèn)參數(shù)

定義函數(shù)時,如果給參數(shù)設(shè)置了默認(rèn)值,當(dāng)調(diào)用該函數(shù)時沒有傳遞對應(yīng)的實參,就會使用這個默認(rèn)值。示例如下:實例4-4默認(rèn)參數(shù)示例>>>defadd(a,b=1):returna+b>>>add(2)3>>>add(2,3)54.2參數(shù)與返回值

4.2.2關(guān)鍵字參數(shù)

實參默認(rèn)情況下是按位置從左至右順序傳遞給函數(shù),而關(guān)鍵字參數(shù)通過“鍵-值”形式加以指定,允許通過變量名進行匹配,而不是通過位置,從而讓函數(shù)更加清晰。例如:實例4-5關(guān)鍵字參數(shù)示例>>>deffunc(a,b,c): print(a,b,c)>>>func(1,2,3)#順序傳遞,1傳給a,2傳給b,3傳給c1,2,3>>>func(c=3,a=1,b=2)#關(guān)鍵字參數(shù)1,2,3采用關(guān)鍵字參數(shù)后,參數(shù)通過變量名進行傳遞,參數(shù)的位置可以任意調(diào)整。4.2參數(shù)與返回值

實例4-1無參函數(shù)deffunc():

print("Pythonisinteresting!")func()該程序輸出結(jié)果如下:Pythonisinteresting!

在函數(shù)定義階段括號內(nèi)沒有參數(shù),稱為無參函數(shù),調(diào)用時也無需傳入?yún)?shù)。如果函數(shù)體的代碼邏輯不需要依賴外部傳入的值,必須定義為無參函數(shù)。

這個函數(shù)的作用就是打印出一句話,但是沒有return,相當(dāng)于返回的值是None。4.2參數(shù)與返回值

4.2.3可變長參數(shù)

可變長參數(shù)就是向一個函數(shù)傳遞不定個數(shù)的參數(shù)。例如,我們要定義一個函數(shù)用于計算咖啡店每單的銷售額,由于每單的咖啡品種及數(shù)量都不一樣,因此傳入的參數(shù)個數(shù)也就不同,這個時候后就可以使用可變長參數(shù)來定義函數(shù)。

可變長參數(shù),一種在參數(shù)前加一個星號(*),數(shù)據(jù)結(jié)構(gòu)為元組;另一種在參數(shù)前加兩個星號(**),數(shù)據(jù)結(jié)構(gòu)為字典。示例如下:實例4-6可變長參數(shù)示例1>>>deff1(a,*args):

print(a,args)>>>f1(1,2,3,4)1(2,3,4)1按照位置傳遞給a;2、3、4被當(dāng)做元組類型數(shù)據(jù)傳遞給args。4.2參數(shù)與返回值

實例4-7可變長參數(shù)示例2>>>deftest(**kwargs):

print(kwargs)

print(type(kwargs))

forkey,valueinkwargs.items():

print("{}={}".format(key,value))>>>test(name='jerry',age=18,address='kunming')該程序輸出結(jié)果為:{'age':18,'name':'jerry','address':'kunming'}<class'dict'>age=18name=jerryaddress=kunmingkwargs是一個字典,傳入的參數(shù)以鍵值對的形式存放到字典里。參數(shù)定義的順序必須是:必選參數(shù)–>默認(rèn)參數(shù)–>可變長參數(shù)。4.2參數(shù)與返回值

4.2.4返回值

return語句用于結(jié)束函數(shù),并將結(jié)果及控制權(quán)返回給調(diào)用者。執(zhí)行到return語句時,會退出函數(shù),return之后的語句不再執(zhí)行。

在實際編程環(huán)境中,一些函數(shù)沒有return語句,只需要干活,不需要返回值(返回None),譬如,實例4-1定義的函數(shù)就只干活(打印語句)。但在大部分情況下,函數(shù)的運行結(jié)果需要用在其它運算中,所以函數(shù)必須返回一個結(jié)果,而不是只局限于把結(jié)果打印出來。接下來,通過幾個微實例進行分析。1.無返回值的函數(shù)實例4-8無返回值的函數(shù)示例1>>>deftest1():

print(“Iamrunningatest”)>>>a=test1()>>>print(a)該程序輸出結(jié)果為:IamrunningatestNone

上面這個函數(shù)沒有return語句,返回給變量a的是None(無返回值),None沒什么利用價值,所以無需用一個變量來存儲。通常采用以下的方式進行調(diào)用。4.2參數(shù)與返回值

實例4-9無返回值的函數(shù)示例2>>>deftest1():

print(“Iamrunningatest”)>>>test1() 該程序輸出結(jié)果為:Iamrunningatest2.有返回值的函數(shù)實例4-10有返回值的函數(shù)示例>>>defsquare_sum(a,b):c=a**2+b**2

returnc>>>s=square_sum(1,2)>>>print(s)該程序輸出結(jié)果為:54.2.4返回值

3.返回多個值

return也可以返回多個值,多個值以元組類型返回。實例4-11返回多個值的函數(shù)示例>>>deftest2():return1,2,3,4,5,6>>>a=test2()>>>print(a)該程序輸出結(jié)果為:(1,2,3,4,5,6)4.3變量的作用域

作用域就是一個變量的可用范圍,由變量名被賦值的位置所決定,根據(jù)作用域的不同可將變量分為兩類:局部變量和全局變量。4.3.1局部變量

局部變量是指定義在函數(shù)內(nèi)部的變量,其作用域是局部的,只能被函數(shù)內(nèi)部引用,在函數(shù)外無效。例如:實例4-12變量示例1>>>deffunc():a=123#a是局部變量print(a)>>>func()1234.3變量的作用域

局部變量只能在函數(shù)內(nèi)部使用,一旦函數(shù)運行退出后,局部作用域被銷毀,局部變量就不存在了,超出函數(shù)體的范圍引用就會出錯,例如:實例4-13變量示例2>>>deffunc():a=123>>>func()>>>print(a)此時,會得到一個錯誤提示:NameError:name'a'isnotdefined4.3變量的作用域4.3.2全局變量全局變量一般定義在所有函數(shù)體之外,其作用域是全局的,在程序整個運行過程中都有效。

若在函數(shù)體內(nèi)定義全局變量(將內(nèi)部作用域修改為全局作用域的變量),必須在定義的時候加上關(guān)鍵詞global。例如:實例4-14變量示例3>>>s=0#全局變量>>>defadd(a,b):

s=a+b#此處的s為局部變量print(s)>>>add(1,2)>>>print(s)運行結(jié)果為:

304.3變量的作用域

從以上結(jié)果得知,add()函數(shù)將s當(dāng)作局部變量,add()運行退出后,釋放s,而函數(shù)體外的全局變量s的值仍然為0,沒有被更改。如果在add()函數(shù)內(nèi)的變量s前加上關(guān)鍵詞global,則運行結(jié)果會發(fā)生改變。示例如下:

實例4-15變量示例4s=0#全局變量>>>defadd(a,b)

globals#s定義為全局變量

s=a+b

print(s)>>>add(1,2)>>>print(s)運行結(jié)果為:

34.3變量的作用域

函數(shù)內(nèi)的s加上關(guān)鍵字global后,變成了全局作用域的變量,add(1,2)函數(shù)運行后隨即改變了全局變量s的值。全局變量在函數(shù)內(nèi)部不經(jīng)過聲明也可以被引用,例如:實例4-16變量示例5>>>x,y=1,2#x,y均為全局變量>>>deffunc():

globalz#z定義為全局變量

z=x*y#引用全局變量x和y

returnz>>>func()運行結(jié)果為:24.3變量的作用域

通過以上幾個實例的學(xué)習(xí),我們對變量的作用域總結(jié)如下:1)一個函數(shù)內(nèi)的局部變量不能被其它函數(shù)引用。2)局部變量不能被全局作用域中的代碼引用。3)局部作用域內(nèi)可以訪問全局變量。

此外,雖然全局變量和局部變量可以使用相同的變量名,也就是同名的不同變量,不過這種做法容易造成程序出錯,所以通常建議局部變量和全局變量使用不同的名字。4.4遞歸

遞歸指的是函數(shù)直接或間接地調(diào)用自身以進行循環(huán)的方式。使用遞歸關(guān)鍵在于將問題分解為更為簡單的子問題,遞歸不能無限制的調(diào)用本身,否則會耗盡資源,最終必須以一個或多個基本實例(非遞歸狀況)結(jié)束。

斐波那契數(shù)列又稱黃金分割數(shù)列,是最典型的一個遞歸例子,由數(shù)學(xué)家列昂納多·斐波那契以兔子繁殖為例子而引入,指的是這樣一個數(shù)列:0,1,1,2,3,5,8,13,21,34,……。該數(shù)列的第0項是0,第1項是第一個1,從第二項以后的每一項都等于前兩項之和。斐波納契數(shù)列通常按照遞推方法定義如下:

F(n)=F(n-1)+F(n-2)

我們可以用遞歸函數(shù)來實現(xiàn)斐波那契數(shù)列的計算。4.4遞歸實例4-8根據(jù)用戶輸入的整數(shù)n,計算輸出斐波那契數(shù)列的第n個數(shù)。#fibo.pydeffibo(n):ifn==0:return0elif

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論