函數(shù)
1纵穿、什么是函數(shù)
函數(shù)就是對(duì)實(shí)現(xiàn)特定功能的代碼的封裝
2诀拭、函數(shù)的分類
系統(tǒng)函數(shù)(內(nèi)置函數(shù))-- 系統(tǒng)已經(jīng)聲明好的函數(shù)(類似已經(jīng)造好的機(jī)器)簸呈,程序員會(huì)用就行
自定義函數(shù) --程序員自己聲明的函數(shù)(自己造機(jī)器)
3额港、聲明函數(shù)
- 語(yǔ)法:
def 函數(shù)名(形參列表):
??函數(shù)說(shuō)明文檔
??函數(shù)體 - 說(shuō)明:
def -- python中聲明函數(shù)的關(guān)鍵字(固定格式)
函數(shù)名 -- 和變量名要求一樣
(): -- 固定寫法
形參列表 -- 以'變量名1, 變量名2, 變量名3,...'的形式存在样屠,每個(gè)變量就叫形參
?????形參的個(gè)數(shù)根據(jù)情況可以沒有蒿涎,也可以有多個(gè)哀托。
?????形參的作用是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里面
函數(shù)說(shuō)明文檔 -- 用三個(gè)雙引號(hào)引起來(lái)的字符串;作用是對(duì)函數(shù)的功能進(jìn)行說(shuō)明
函數(shù)體 -- 和def保持一個(gè)縮進(jìn)的一行或者多行語(yǔ)句劳秋。(實(shí)現(xiàn)函數(shù)功能的多條語(yǔ)句) - 初學(xué)者聲明的步驟
a.確定函數(shù)的功能
b.根據(jù)函數(shù)的功能的來(lái)確定函數(shù)名
c.確定函數(shù)的參數(shù):看實(shí)現(xiàn)函數(shù)的功能需不需要從外面?zhèn)髦挡质郑枰獛讉€(gè)?
d.實(shí)現(xiàn)函數(shù)的功能
注意:聲明函數(shù)的時(shí)候不會(huì)執(zhí)行函數(shù)體
4玻淑、函數(shù)的調(diào)用(調(diào)用函數(shù)相當(dāng)于使用機(jī)器)
- 語(yǔ)法:
函數(shù)名(實(shí)參列表) - 說(shuō)明:
函數(shù)名 -- 已經(jīng)聲明過(guò)的函數(shù)的函數(shù)名
() -- 固定寫法
實(shí)參列表 -- 以'值1, 值2, 值2, ...'形式存在嗽冒;這兒的每個(gè)值就叫實(shí)參;
實(shí)參是用來(lái)給形參賦值的
# 要求寫一個(gè)函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)的和
def sum_1(x, y):
"""
求兩個(gè)數(shù)的和
:param x: 參數(shù)1
:param y: 參數(shù)2
:return: 返回參數(shù)1和參數(shù)2的和
"""
res = x + y
return res
x = 1
y = 2
print(sum_1(x, y))
5补履、函數(shù)的調(diào)用過(guò)程
- 語(yǔ)法:
函數(shù)名(實(shí)參列表) - 調(diào)用函數(shù)的作用:執(zhí)行函數(shù)體添坊,獲取返回值
- 函數(shù)的調(diào)用過(guò)程:
第一步:回到函數(shù)聲明的位置
第二步:傳參(用實(shí)參給形參賦值)
第三步:執(zhí)行函數(shù)體
第四步:執(zhí)行完函數(shù)體就確定返回值
第五步:回到函數(shù)調(diào)用的位置,接著往后面執(zhí)行
def sum1(num):
"""
求前num的和
:param num: 參數(shù)的值
:return: 返回前num項(xiàng)的和
"""
res = 0
for i in range(num+1):
res += i
return res
print(sum1(100))
def str_1(str1):
"""
打印字符串中所有的字符
:param str1:傳入一個(gè)字符串
:return:返回字符串中的每個(gè)字符
"""
for i in str1:
if 'a' <= i <= 'z' or 'A' <= i <= 'Z':
print(i, end='')
str_1("hello world!")
def str_2(str2, char1):
"""
在字符串中的數(shù)字后面加一個(gè)特殊字符
:param str2: 傳入一個(gè)帶有數(shù)字的字符串
:return: 返回一個(gè)在數(shù)字字符后面加=的字符串
"""
res = ''
for j in str2:
if '0' <= j <= '9':
res += j + char1
else:
res += j
return res
print()
print(str_2('1hello 2world!', '='))
6箫锤、位置參數(shù)和關(guān)鍵字參數(shù)
根據(jù)調(diào)用函數(shù)的時(shí)候傳參的方式將參數(shù)分為位置參數(shù)和關(guān)鍵字參數(shù)
- 位置參數(shù):讓實(shí)參和形參在位置上一一對(duì)應(yīng)(第一個(gè)實(shí)參給第一個(gè)形參賦值贬蛙,第二個(gè)實(shí)參給第二個(gè)形參賦值...)
- 關(guān)鍵字參數(shù):以'形參名=值'的形式傳參
注意:如果位置參數(shù)和關(guān)鍵字參數(shù)同時(shí)使用,位置參數(shù)放在前面谚攒,關(guān)鍵字參數(shù)放在后面 - 什么時(shí)候使用關(guān)鍵字參數(shù):需要跳過(guò)前面某一個(gè)或幾個(gè)參數(shù)阳准,直接給后面參數(shù)賦值的時(shí)候必須要使用關(guān)鍵字參數(shù)
7、參數(shù)默認(rèn)值
聲明函數(shù)的時(shí)候馏臭,形參可以設(shè)置默認(rèn)值野蝇,設(shè)置完默認(rèn)值后調(diào)用函數(shù)的時(shí)候有默認(rèn)值的參數(shù)可以不用傳參
一個(gè)函數(shù)可以給所有的參數(shù)都設(shè)置默認(rèn)值,也可以給部分參數(shù)設(shè)置默認(rèn)值括儒;但必須保證沒有默認(rèn)值的參數(shù)必須放在有默認(rèn)值參數(shù)的前面
8浪耘、參數(shù)類型說(shuō)明:
- 給參數(shù)賦默認(rèn)值,默認(rèn)值的類型就是參數(shù)的類型
- 以'參數(shù)名:類型名'的形式聲明函數(shù)
9塑崖、不定長(zhǎng)參數(shù)
- 在形參前面加一個(gè)*號(hào)七冲,那么這個(gè)參數(shù)就可以同時(shí)接受多個(gè)實(shí)參(位置參數(shù));帶*的參數(shù)會(huì)作為一個(gè)元組规婆,對(duì)應(yīng)的多個(gè)實(shí)參是元組中的元素
帶*的不定長(zhǎng)參數(shù)澜躺,不能使用關(guān)鍵字參數(shù)傳參 - 在形參前加**蝉稳,那么這個(gè)參數(shù)也可以同時(shí)接受多個(gè)實(shí)參(關(guān)鍵字參數(shù),關(guān)鍵字自己隨便命名)掘鄙;將帶**的參數(shù)作為一個(gè)字典耘戚,將關(guān)鍵字參數(shù)
的關(guān)鍵字作為key,實(shí)參作為value存儲(chǔ)在字典中。
*args和**kwargs一起使用是為了保證不定長(zhǎng)參數(shù)傳參的時(shí)候既可以使用位置參數(shù)也可以使用關(guān)鍵字參數(shù)
補(bǔ)充:*的用法:*列表/*元組 --> 直接取出列表/元組中所有的元素
**字典 --> 直接取出字典中的所有元素
list1 = [1, 2, 3]
print(*list1)
def func1(a, b):
print(a, b)
dict1 = {'a': 1, 'b': 2}
func1(**dict1)
練習(xí):聲明一個(gè)函數(shù)操漠,求多個(gè)數(shù)的差
def fun2(*args):
res = args[0]
for i in range(len(args)-1):
res -= args[i+1]
return res
print(fun2(1, 2, 3, 4))
def fun3(*args):
if not args:
return 0
res = args[0]
for num in args[1:]:
res -= num
return res
print(fun3(1, 2, 3, 4, 5))
10收津、什么是返回值
返回值就是return關(guān)鍵字后表達(dá)式的值(怎么確定函數(shù)的返回值)
返回值就是函數(shù)調(diào)用表達(dá)式的值(怎么去獲取函數(shù)的返回值)
python中所有函數(shù)都有返回值,默認(rèn)是None
- 什么是return
return是函數(shù)體中的關(guān)鍵字(只能在函數(shù)中使用)浊伙,作用有兩個(gè):結(jié)束函數(shù)和確定函數(shù)返回值
a.結(jié)束函數(shù):執(zhí)行函數(shù)體的時(shí)候只要遇到return函數(shù)就直接結(jié)束
b.確定函數(shù)的返回值:return 返回值(可以是具體的數(shù)據(jù)撞秋,聲明過(guò)的變量,運(yùn)算表達(dá)式) - 什么是函數(shù)調(diào)用表達(dá)式
函數(shù)調(diào)用語(yǔ)句就是函數(shù)調(diào)用表達(dá)式
每個(gè)調(diào)用函數(shù)的語(yǔ)句都有結(jié)果嚣鄙,這個(gè)結(jié)果就是調(diào)用這個(gè)函數(shù)得到的返回值
11吻贿、怎么使用返回值
想要用函數(shù)的返回值,就是使用函數(shù)調(diào)用表達(dá)式的值
普通數(shù)據(jù)能做的事情哑子,函數(shù)調(diào)用表達(dá)式都可以做
12舅列、什么時(shí)候需要返回值
初學(xué)者:看實(shí)現(xiàn)函數(shù)的功能會(huì)不會(huì)產(chǎn)生新的數(shù)據(jù)