代碼組織:函數(shù)(def)
封裝一個功能
封裝
-
容器是對數(shù)據(jù)的封裝
函數(shù)是對語句的封裝
類是對方法和屬性的封裝
函數(shù)(function)
- 程序中實現(xiàn)明確功能的代碼段可以封裝成一個函數(shù),以便復(fù)用(reuse)
函數(shù)的分類
系統(tǒng)函數(shù)
- 系統(tǒng)已經(jīng)定義好了曹动,程序可以直接調(diào)用的函數(shù):比如:print牲览、input、type、ord兔港、chr、bin衫樊、len利花、id等等。(別人造好的)
自定義函數(shù)
- 程序員自己定義的函數(shù)(自己造的)
定義與調(diào)用函數(shù)
定義函數(shù)
用def語句
創(chuàng)建一個函數(shù)
用return關(guān)鍵字
指定函數(shù)返回的值
def <函數(shù)名> (<形參列表>):
函數(shù)說明文檔
<縮進(jìn)的代碼段>
return <函數(shù)返回值>
- 什么時候用返回值臀栈?看實現(xiàn)函數(shù)的功能會不會產(chǎn)生新的數(shù)據(jù)挠乳?如果產(chǎn)生新的數(shù)據(jù)就將新的數(shù)據(jù)作為返回值返回
- return后面就是要返回的值 return 表達(dá)式1,表達(dá)式2睡扬,表達(dá)式3......
- return 是關(guān)鍵字,只能出現(xiàn)在函數(shù)里面用
- return作用
- 把數(shù)據(jù)從函數(shù)內(nèi)部扔到函數(shù)的外部
- 結(jié)束函數(shù)刁俭,執(zhí)行函數(shù)體只要遇到return就會結(jié)束
- 表達(dá)式可以一個都沒有(相當(dāng)于None)宛渐,也可以有一個(就是指定數(shù)據(jù))获搏,也可以有多個(返回的是一個元組,值就是元素)
- 注意:如果一函數(shù)中沒有return娩贷,或者執(zhí)行函數(shù)體的時候沒有遇到return,函數(shù)的返回值就是None
- 怎樣在外部使用返回值茁瘦?返回值就是函數(shù)調(diào)用表達(dá)式的值
- 普通數(shù)據(jù)能做的事情储笑,函數(shù)調(diào)用表達(dá)式的值都能做
調(diào)用函數(shù)
<函數(shù)名>(<參數(shù)>)
注意括號!
無返回值:<函數(shù)名>(<參數(shù)表>)
返回值賦值:v = <函數(shù)名>(<參數(shù)表>)
- 函數(shù)調(diào)用過程
- 第一步:回到函數(shù)定義的位置
- 第二步:傳參 用實參給形參賦值突倍,保證每個參數(shù)都有值
- 第三步:執(zhí)行函數(shù)體
- 第四步:執(zhí)行完函數(shù)體(1執(zhí)行完函數(shù)體中的最后一條語句盆昙,2遇到return焊虏。)確定返回值(看有沒有執(zhí)行到return,遇到了函數(shù)返回值就是return后面的值炼团,否則就是None)涂圆。
- 第五步:回到函數(shù)調(diào)用的位置,接著往回執(zhí)行润歉。這時候函數(shù)調(diào)用表達(dá)式的值就是函數(shù)的返回值
?
變量的作用域
局部變量(Local Variable)
在函數(shù)內(nèi)部定義的參數(shù)以及變量 只在該函數(shù)定義范圍內(nèi)有效,函數(shù)外邊無法訪問到
形參是局部變量
作用域:是定義開始到函數(shù)結(jié)束都可以使用
# 面試題:問以下程序結(jié)束后打印的結(jié)果是多少
def func1(list1=[10,20,30]):
# list1 = [10,20,30]
list1.append(100)
return list1
scores = func1()
scores = func1()
print(scores)
全局變量(Global Variable)
在函數(shù)外部定義的嚼鹉,作用域是整個代碼段
沒有定義在函數(shù)里面揮著類里面的變量就是全局變量
作用域:從定義開始到程序結(jié)束驱富,任意位置都可以使用全局變量
global關(guān)鍵字
- 可以在一個函數(shù)內(nèi)部
得到
某個全局變量的值,但是無法進(jìn)行修改褐鸥,Python會在函數(shù)內(nèi)部創(chuàng)建一個同名的局部變量 ,使用global關(guān)鍵字可以在函數(shù)中改變
全局變量的值
name = 'Allen'
def func
nonglobal
全局變量 嵌套變量 本地變量 希望在本地變量修改嵌套變量的值時使用
注意:聲明必須放在使用變量前
函數(shù)調(diào)用過程中內(nèi)存的變化:
每次在調(diào)用函數(shù)的時候叫榕,系統(tǒng)會自動為這個函數(shù)創(chuàng)建一個獨(dú)立的棧區(qū)間浑侥,用來保存函數(shù)運(yùn)行過程中產(chǎn)生的數(shù)據(jù)(函數(shù)的參數(shù),函數(shù)中聲明的變量寓落,當(dāng)函數(shù)調(diào)用結(jié)束后荞下,棧區(qū)間釋放。這個過程叫壓棧
匿名函數(shù)
- 匿名函數(shù)本質(zhì)還是函數(shù)尖昏,普通函數(shù)中,除了定義的語法肖卧,其他全部適用于匿名函數(shù)
定義匿名函數(shù)
- 語法 : lambda 形參列表:返回值
- lambda - 關(guān)鍵字
- 形參列表 - 形參1掸鹅,形參2,....的形式存在
- :固定寫法
- 返回值:返回任何有結(jié)果的表達(dá)式
# 定義一個匿名函數(shù),求兩個數(shù)的和
x = lambda num1,num2:num1+num2
print(x(100,200))
調(diào)用匿名函數(shù)
(函數(shù)(實參列表))
匿名函數(shù)的本質(zhì)是類型是function的數(shù)據(jù),普通數(shù)據(jù)能做的他都能做
遞歸函數(shù)
函數(shù)內(nèi)調(diào)用函數(shù)本身的函數(shù)
第一步:確定臨界值葵姥,在臨界值的位置結(jié)束函數(shù)
第二步:找關(guān)系(找當(dāng)次循環(huán)(f(n))和上一次循環(huán)(f(n-1))之間的關(guān)系或說 f(n-1)要怎樣變?yōu)閒(n),加上什么句携?乘上什么榔幸?等等)
第三步:假設(shè)函數(shù)功能(關(guān)系成立)已經(jīng)實現(xiàn),用f(n-1)取實現(xiàn)f(n)的功能