1.函數(shù)的調(diào)用
函數(shù)在聲明的時(shí)候不會(huì)執(zhí)行函數(shù)體,只有在調(diào)用函數(shù)的時(shí)候才會(huì)執(zhí)行函數(shù)體
- 函數(shù)的調(diào)用的過程
第一步:回到函數(shù)聲明的位置
第二步:用實(shí)參給形參賦值(傳參) 傳參一定要保證每個(gè)形參都有值
第三步:執(zhí)行函數(shù)體
第四步:獲取返回值
第五步:回到函數(shù)調(diào)用的位置绕辖,接著往后執(zhí)行
函數(shù)的調(diào)用過程是一個(gè)壓棧的過程
當(dāng)函數(shù)調(diào)用的時(shí)候摇肌,系統(tǒng)會(huì)自動(dòng)的在內(nèi)存中的棧區(qū)間開辟空間,存儲(chǔ)函數(shù)調(diào)用的時(shí)候產(chǎn)生的數(shù)據(jù)
(這里的數(shù)據(jù)包括參數(shù)和在函數(shù)中聲明的變量引镊,當(dāng)函數(shù)調(diào)用完成后會(huì)自動(dòng)銷毀)
2.函數(shù)的參數(shù)
- 1.根據(jù)實(shí)參分為位置參數(shù)和關(guān)鍵字參數(shù)
a.位置參數(shù)
實(shí)參的位置和形參的位置一一對(duì)應(yīng)
def func1(a, b, c):
print(a, b, c)
func1(1, 2, 3)
b.關(guān)鍵字參數(shù)
實(shí)參以“形參名=值”的形式來傳參
func1(c=3, b=2, a=1)
位置參數(shù)可以和關(guān)鍵字參數(shù)混合使用
前提:保證每個(gè)參數(shù)都有值;位置參數(shù)必須在關(guān)鍵字參數(shù)前面
func1(1, c=3, b=2)
- 2.從函數(shù)聲明的角度又有:參數(shù)默認(rèn)值朦蕴,不定長(zhǎng)參數(shù),參數(shù)類型說明
a.參數(shù)的默認(rèn)值
聲明函數(shù)的時(shí)候可以給參數(shù)設(shè)置默認(rèn)值弟头,語法:參數(shù)名 = 默認(rèn)值
如果函數(shù)聲明的時(shí)候參數(shù)有默認(rèn)值吩抓,調(diào)用函數(shù)的時(shí)候,有默認(rèn)值的參數(shù)可以不用賦值
多個(gè)參數(shù) 有默認(rèn)值的參數(shù)一定要放到最后面 否則會(huì)報(bào)錯(cuò)
注意:設(shè)置默認(rèn)值除了可以給參數(shù)一個(gè)默認(rèn)值赴恨,也可以對(duì)參數(shù)的類型進(jìn)行說明
def func(a, b=2, c=3):
print('a:%d b:%d c:%d' % (a, b, c))
func(10, 20, 30)
func(10, 20)
b.不定長(zhǎng)參數(shù):函數(shù)的參數(shù)不確定(對(duì)應(yīng)位置可以傳任意個(gè)實(shí)參)
在函數(shù)聲明的時(shí)候疹娶,參數(shù)名前加 * ,會(huì)將這個(gè)參數(shù)變成元祖伦连,來獲取多個(gè)參數(shù)的值(通過位置參數(shù)調(diào)用)
在函數(shù)聲明的時(shí)候雨饺,參數(shù)名前加 ** ,會(huì)將這個(gè)參數(shù)變成字典惑淳,來獲取多個(gè)參數(shù)的值(通過關(guān)鍵字參數(shù)來傳參额港,關(guān)鍵字可以隨便命名)
- 聲明一個(gè)函數(shù),功能是求對(duì)個(gè)數(shù)的和
def sum_num(*num):
print(sum(num))
sum_num(1, 2, 3, 4)
c.一顆 * 和兩顆 * 一起使用 用來表示不定長(zhǎng)參數(shù)歧焦,調(diào)用的時(shí)候更靈活移斩,
可以用位置參數(shù)傳參,也可以用關(guān)鍵字參數(shù)傳參绢馍,
也可以一起用(位置參數(shù)再去向瓷,關(guān)鍵字參數(shù)在后)
要求:一顆 * 參數(shù)要放在兩顆 * 參數(shù)的前面
def func1(*args, **kwargs):
print(args, kwargs)
func1()
- 練習(xí):求多個(gè)數(shù)的和,要求:調(diào)用函數(shù)的時(shí)候可以多樣性
def func2(*args, **kwargs):
sum1 = 0
for x in kwargs:
sum1 += kwargs[x]
print((sum(args) + sum1))
func2(8, 2, a=1, b=3)
- 3.參數(shù)類型說明
參數(shù)類型說明只是對(duì)參數(shù)類型進(jìn)行提示舰涌,不會(huì)限制參數(shù)類型
a.設(shè)置默認(rèn)值
b.參數(shù)名后面加冒號(hào)(參數(shù)名:類型名)
注意:類型說明除了說明類型外猖任,還可以做相應(yīng)類型對(duì)應(yīng)的語法提示
可以對(duì)返回值進(jìn)行說明: def func1(a: int) -> int:
def func3(a:int, b= ''):
print(a, b)
func3(10, 'abc')
func3('abc', 10)
3.函數(shù)的返回值
- 1.返回值
函數(shù)的返回值就是return關(guān)鍵字后面表達(dá)式的值,就是函數(shù)調(diào)用表達(dá)式的值
python中所有的函數(shù)都有返回值瓷耙,默認(rèn)是None
return - 關(guān)鍵字朱躺,用來返回 返回值刁赖;結(jié)束函數(shù)(當(dāng)函數(shù)在執(zhí)行過程中遇到了return,函數(shù)就直接結(jié)束)
如果函數(shù)體中沒有trturn室琢,函數(shù)會(huì)在函數(shù)體執(zhí)行完后將None作為返回值
函數(shù)調(diào)用表達(dá)式 - 調(diào)用函數(shù)的語句乾闰;當(dāng)函數(shù)調(diào)用完成后,函數(shù)調(diào)用表達(dá)式的結(jié)果就是函數(shù)的返回值
為什么使用返回值:
如果實(shí)現(xiàn)函數(shù)的功能會(huì)產(chǎn)生新的數(shù)據(jù)盈滴,一般都會(huì)將這個(gè)數(shù)據(jù)返回
函數(shù)里打印出來的數(shù)據(jù)會(huì)自動(dòng)銷毀
使用return可以將結(jié)果返回涯肩,防止被銷毀
def func1(m, n):
print(m, n)
return 100
def func2(m, n):
return m + n
def func3(m, n):
print(m + n)
return m, n
print(m, n)
print(func3(1, 2))
- 2.同時(shí)返回多個(gè)值
python的函數(shù)支持返回多個(gè)值
return 返回值1,返回值2巢钓,...
- 寫一個(gè)函數(shù)病苗,求多個(gè)數(shù)的和以及平均值
def num_sum(*num):
return sum(num), sum(num) / len(num)
print(num_sum(1, 2, 3))
x, y = num_sum(1, 2, 3)
print(*num_sum(1, 2, 3))
print(x, y)
a, b = (1, 2)
print(a, b)
運(yùn)行:
4.返回值的應(yīng)用
- 1.用函數(shù)調(diào)用表達(dá)式給變量賦值
返回值能做的事情,函數(shù)調(diào)用表達(dá)式都可以用
2.通過函數(shù)調(diào)用表達(dá)式使用相關(guān)方法
3.將函數(shù)調(diào)用表達(dá)式作為容器的元素症汹、函數(shù)的參數(shù)硫朦、函數(shù)的返回值
5.匿名函數(shù)
匿名函數(shù)還是函數(shù),除了聲明的語法外背镇,函數(shù)其他語法匿名函數(shù)都支持
- 1.匿名函數(shù)的聲明
函數(shù)名 = lambda 參數(shù)列表:返回值
說明:
函數(shù)名 - 變量名
lambda - 關(guān)鍵字
參數(shù)列表 - 和普通函數(shù)的參數(shù)列表的作用和要求一樣
返回值 - 相當(dāng)于普通函數(shù)的return后面的表達(dá)式
冒號(hào)后面的語句屬于函數(shù)體
調(diào)用和普通函數(shù)一樣
- 用匿名函數(shù)求兩個(gè)數(shù)的和
my_sum = lambda num1, num2: num1 + num2
print(my_sum(1, 2))
- 寫一個(gè)匿名函數(shù)咬展,求兩個(gè)數(shù)的最大值
num_max = lambda num1, num2: max(num1, num2)
print(num_max(1, 2))
- python中的三目運(yùn)算符
C中的三目運(yùn)算符:
條件語句?值1:值2 - 條件語句為True,結(jié)果是值1瞒斩,否則是值2
python中的三目運(yùn)算符:
值1 if 條件語句 else 值2 - 條件語句為True,結(jié)果是值1破婆,否則是值2
x = 10
y = 20
max1 = x if x > y else y
print(max1)
- 練習(xí):寫一個(gè)匿名函數(shù),獲取字典中指定key對(duì)應(yīng)的值
values = lambda key, dict1: dict1[key]
print(values(2, {2: 1, 'a': 3}))
運(yùn)行: