1.函數(shù)的返回值
1.什么是返回值
返回值是函數(shù)從函數(shù)里面?zhèn)鬟f到函數(shù)外面的數(shù)據(jù)
1)怎么返回
返回值就是return關(guān)鍵字后面的表達(dá)式的值
語(yǔ)法: return 表達(dá)式1,表達(dá)式2....
說(shuō)明:
return - 關(guān)鍵字准谚,只能出現(xiàn)在函數(shù)體中
a.將數(shù)據(jù)從函數(shù)內(nèi)部扔到函數(shù)外部 b.結(jié)束函數(shù)(執(zhí)行函數(shù)的時(shí)候只要遇到return函數(shù)直接結(jié)束)
表達(dá)式 - 可以一個(gè)都沒(méi)有(None)中狂,也可以有一個(gè)(返回值就是指定數(shù)據(jù))颊艳,也可以有多個(gè)(本質(zhì)返回的是一個(gè)元組)
注意:如果一個(gè)函數(shù)中沒(méi)有return或者執(zhí)行函數(shù)體時(shí)候沒(méi)有遇到return诅需,那么這個(gè)函數(shù)的返回值是None
2)怎么在外部使用返回值返回的數(shù)據(jù)
返回值就是函數(shù)調(diào)用表達(dá)式的值
2.什么時(shí)候需要返回值
看實(shí)現(xiàn)函數(shù)的功能會(huì)不會(huì)產(chǎn)生新的數(shù)據(jù),如果產(chǎn)生了新的數(shù)據(jù)就將新的數(shù)據(jù)作為返回值返回
普通數(shù)據(jù)能做的事情囊蓝,函數(shù)調(diào)用表達(dá)式都可以做起胰。
3.函數(shù)調(diào)用過(guò)程
第一步:回到函數(shù)定義的位置
第二步:傳參(用實(shí)參給形參賦值升酣;傳參的時(shí)候必須保證每個(gè)參數(shù)都有值)
第三步:執(zhí)行函數(shù)體
第四步:執(zhí)行完函數(shù)體(a.執(zhí)行完函數(shù)體中的最后一條語(yǔ)句 b.遇到return)確定返回值(看執(zhí)行完函數(shù)體有沒(méi)有遇到return诫睬,如果遇到了函數(shù)的返回值就是return后面的值厢漩,否則是None)
第五步:回到函數(shù)調(diào)用的位置接著往后執(zhí)行(這個(gè)時(shí)候函數(shù)調(diào)用表達(dá)式的值就是函數(shù)的返回值)
2.全局變量和局部變量
1.函數(shù)調(diào)用過(guò)程中內(nèi)存的變化
每次在調(diào)用函數(shù)的時(shí)候,系統(tǒng)會(huì)自動(dòng)為這個(gè)函數(shù)創(chuàng)建一個(gè)獨(dú)立的棧區(qū)間岩臣,用來(lái)保存函數(shù)運(yùn)行過(guò)程中產(chǎn)生的數(shù)據(jù)(函數(shù)的參數(shù)溜嗜,函數(shù)中聲明的變量)。當(dāng)函數(shù)調(diào)用結(jié)束后架谎,這個(gè)棧區(qū)間會(huì)自動(dòng)銷(xiāo)毀炸宵。(這個(gè)過(guò)程叫壓棧)
2.全局變量和局部變量
1)全局變量
沒(méi)有定義在函數(shù)里面或者類(lèi)里面的變量就是全局變量
全局變量的作用域:從定義開(kāi)始到程序結(jié)束的任何位置都可以使用
2)局部變量
定義在函數(shù)中的變量是局部變量(形參是局部變量,注意:定義函數(shù)的時(shí)候給形參賦的默認(rèn)值其實(shí)是保存在堆里面的)
局部變量的作用域:定義開(kāi)始到函數(shù)結(jié)束的任何位置都可以使用
3.global 和 nonlocal
1)global:在函數(shù)中聲明指定的變量是全局變量
作用:a. 在函數(shù)中修改全局變量的值
b. 在函數(shù)中定義全局變量
- nonlocal
如果希望在局部的局部中去修改局部變量的值谷扣,就可以用nonlocal進(jìn)行說(shuō)明
注意:聲明必須放在使用變量前面土全,否則會(huì)報(bào)錯(cuò)
name = '張三'
def change():
global name # 在全局變量中修改name的值
name = '李四'
global age # 在函數(shù)中定義全局變量
age = 18
return name
change()
print(name, age)
4.匿名函數(shù)
1.什么是匿名函數(shù)
匿名函數(shù)本質(zhì)還是函數(shù),普通函數(shù)中除了定義的語(yǔ)法会涎,其他全部適用于匿名函數(shù)
匿名函數(shù)的本質(zhì)就是類(lèi)型是function的數(shù)據(jù),普通數(shù)據(jù)可以做的它都可以做
語(yǔ)法:
Lambda 形參列表:返回值
5.遞歸函數(shù)
1.什么是遞歸函數(shù):
在循環(huán)內(nèi)部調(diào)用函數(shù)本身裹匙,循環(huán)能做的事遞歸都能做
2.怎么使用遞歸
第一步:確定臨界值(在臨界值的位置結(jié)束函數(shù))
第二步:找關(guān)系(找當(dāng)次循環(huán)f(n)和上一次循環(huán)f(n-1)之間的關(guān)系)
第三步:假設(shè)函數(shù)功能已經(jīng)實(shí)現(xiàn),用上一次循環(huán)f(n-1)去實(shí)現(xiàn)當(dāng)次循環(huán)功能(f(n))
舉例:
def yt_sum(n):
# 1.找臨界值
if n == 1:
return 10
# 2.關(guān)系:yt_sum(n) = yt_sum(n-1) + n
return yt_sum(n-1) + n
print(yt_sum(100))
def yt_sum1(n):
if n == 1 or n == 2:
return 1
return yt_sum1(n-1) + yt_sum1(n-2)
print(yt_sum1(40))