1.什么是函數(shù)
函數(shù)就是對(duì)實(shí)現(xiàn)特定功能的代碼的封裝
2.函數(shù)的分類
系統(tǒng)函數(shù):(內(nèi)置函數(shù)) - 系統(tǒng)已經(jīng)聲明好的函數(shù)趁窃,列如print盆佣、input隶糕、sum....
自定義函數(shù) - 程序員自己聲明的函數(shù)
3.聲明函數(shù)
1)語(yǔ)法:
def 函數(shù)名(參數(shù)列表):
(函數(shù)說(shuō)明文檔)
函數(shù)體
2)說(shuō)明:
def - python中聲明函數(shù)的關(guān)鍵字(固定寫法)
函數(shù)名 - 和變量名的要求一樣(和內(nèi)置函數(shù)名不要重復(fù)尚揣,否則會(huì)導(dǎo)致內(nèi)置函數(shù)無(wú)法使用)
(): - 固定寫法
形參列表 - 變量名1, 變量名2, ....... 以這種形式存在抑堡,每個(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)的實(shí)現(xiàn)函數(shù)功能的一行或者多行語(yǔ)句。
3)聲明函數(shù)的步驟:
a.確定函數(shù)的功能
b.根據(jù)函數(shù)功能確定函數(shù)名
c.確定函數(shù)的參數(shù):看實(shí)現(xiàn)函數(shù)的功能需不需要從外面?zhèn)髦凳籽枰獛讉€(gè)
d.實(shí)現(xiàn)函數(shù)功能
e.確定返回值
注意:聲明函數(shù)不會(huì)執(zhí)行函數(shù)體
4.函數(shù)的調(diào)用(使用函數(shù))
1)語(yǔ)法
函數(shù)名(實(shí)參列表)
2)說(shuō)明
函數(shù)名 - 要使用的函數(shù)的函數(shù)名
() - 固定寫法
實(shí)參列表 - 值1, 值2, ... 以這種方式存在偎漫,代表每個(gè)實(shí)參;實(shí)參的作用就是給每個(gè)形參賦值的
同一個(gè)函數(shù)可以調(diào)用多次
# 寫一個(gè)函數(shù)有缆,求兩個(gè)數(shù)的和并且打印
def sum_n_m(n, m):
"""
求兩個(gè)數(shù)的和
:param n: 求和數(shù)1象踊,int, float
:param m: 求和數(shù)2,int棚壁,
:return:
"""""
return n + m
print(sum_n_m(1, 2))
def sum_n(n):
"""
求0~ n-1 的累加
:param n:
:return:
"""
sum1 = 0
for num in range(n):
sum1 += num
return sum1
print(sum_n(5))
函數(shù)的調(diào)用過程
1)語(yǔ)法
函數(shù)名(實(shí)參列表)
2)地哦啊用函數(shù)的作用:執(zhí)行函數(shù)體杯矩;獲取函數(shù)返回值
3)函數(shù)調(diào)用過程:
函數(shù)調(diào)用
一:回到函數(shù)聲明的位置
二:傳參(用實(shí)參給形參賦值)
三:執(zhí)行函數(shù)體
四:確定返回值
五:回到函數(shù)調(diào)用處接著往下執(zhí)行
# 聲明一個(gè)函數(shù),實(shí)現(xiàn)求1+.....+N的和
def sum_n(n):
sum_all = 0
for i in range(1, n + 1):
sum_all += i
print(sum_all)
# 聲明一個(gè)函數(shù)袖外,打印字符串中所有的字母字符
def print_str(str1):
str2 = ''
for i in str1:
if 'a' <= i <= 'z' or 'A' <= i <= 'Z':
str2 += i
print(str2)
# 聲明一個(gè)函數(shù)史隆,在指定的字符串中數(shù)字字符后面都添加一個(gè)指定的字符
def add_str(str1, str2):
str3 = ''
for i in str1:
if '0' <= i <= '9':
str3 += i + str2
else:
str3 += i
print(str3)
sum_n(100)
print_str("sd132dad")
add_str("dad1a2a3", '+')
1.位置參數(shù)和關(guān)鍵字參數(shù)
根據(jù)調(diào)用函數(shù)的時(shí)候傳參的方式將參數(shù)分為位置參數(shù)和關(guān)鍵字參數(shù)
1)位置參數(shù):讓實(shí)參和形參在位置上一一對(duì)應(yīng)(每一個(gè)實(shí)參給相對(duì)應(yīng)的形參賦值)
2)關(guān)鍵字參數(shù):以'形參名 = 值'的形式傳參
3)什么時(shí)候使用關(guān)鍵字參數(shù):需要跳過前面某個(gè)或某幾個(gè)參數(shù),直接給后面某個(gè)參數(shù)賦值的時(shí)候必須使用關(guān)鍵字參數(shù)
注意:位置參數(shù)和關(guān)鍵字參數(shù)同時(shí)使用曼验,位置參數(shù)寫在前面泌射,關(guān)鍵字參數(shù)寫在后面
def func1(a, b, c):
print('a: {}, b: {}, c: {}'.format(a, b, c))
func1(10, 11, 12)
func1(a=10, b=11, c=12)
func1(b=11, a=10, c=12)
func1(10, b=11, c=12)
參數(shù)默認(rèn)值
聲明函數(shù)的時(shí)候,形參可以設(shè)置默認(rèn)值鬓照。
(設(shè)置完默認(rèn)值后調(diào)用函數(shù)的時(shí)候幽默任職的參數(shù)可以不用傳參,也可以傳遞參數(shù)熔酷,傳參之后會(huì)覆蓋默認(rèn)值)
注意:一個(gè)函數(shù)可以給所有的形參設(shè)置默認(rèn)值,也可以給部分形參設(shè)置默認(rèn)值颖杏;
但是必須保證沒有默認(rèn)值的參數(shù)必須放在有默認(rèn)值參數(shù)的前面
def func2(a=111, b=121, c=131):
print('a: {}, b: {}, c: {}'.format(a, b, c))
func2(100, 200)
func2(100)
func2(100, 200, 300)
func2()
func2(100, c=300)
3.參數(shù)類型說(shuō)明
1)給參數(shù)賦默認(rèn)值纯陨,默認(rèn)值的類型就是參數(shù)的類型
2)以'參數(shù)名:類型名'的形式聲明函數(shù)
def func3(a, b: str, c=10.0):
print('a: {}, b: {}, c: {}'.format(a, b, c))
func2(100, '200', 300)
func3(1, 's', 3)
def func4(x: list):
x.append(100)
4.不定長(zhǎng)參數(shù)
1)在形參的前面加,那么這個(gè)參數(shù)就可以接受多個(gè)位置參數(shù) (參數(shù) ->會(huì)作為一個(gè)元組,對(duì)應(yīng)的多個(gè)實(shí)參是元祖中的元素)
注意:帶*的參數(shù)不能使用關(guān)鍵字參數(shù)傳參
2)在形參的前面加翼抠,這個(gè)參數(shù)可以接受多個(gè)關(guān)鍵字參數(shù)(關(guān)鍵字自己命名)將帶的參數(shù)作為一個(gè)字典咙轩,將關(guān)鍵字參數(shù)的關(guān)鍵字作為key實(shí)參作為value存儲(chǔ)在字典中
def func(*args, **kwargs) 可以用位置參數(shù)傳參,也可以用關(guān)鍵字傳參阴颖,也可以同時(shí)使用位置參數(shù)和關(guān)鍵字參數(shù)
# 寫一個(gè)函數(shù)活喊,計(jì)算多個(gè)數(shù)的和
def sum_all(*nums):
sum1 = 0
for i in nums:
sum1 += i
print(sum1)
sum_all(1, 2, 3, 4)
def func5(a, b, *nums):
print(a, b, nums)
def func6(**nums):
print(nums)
func6(a=1, b=2) # {'a': 1, 'b': 2}
def func7(*args, **kwargs):
print(args, kwargs)
pass
func7(1, 2)
func7(a=1, b=2)
func7(2, 4, a=1, b=2)
補(bǔ)充:*的用法
解列表或元組包(取出列表或元組所有的元素)
**的用法
解字典的包(取出字典中的所有值,key對(duì)應(yīng)形參名量愧,value對(duì)應(yīng)實(shí)參)
list1 = [89, 52, 33]
print(*list1) # 89 52 33
def func8(x, y):
print(x, y)
list2 = [1, 2]
func8(*list2) # 1 2
dict1 = {'x': 1, 'y': 2}
func8(**dict1) # 1 2
# 練習(xí):聲明一個(gè)函數(shù)钾菊,求多個(gè)數(shù)的差
def differ(*x):
dif = 0
for i in range(len(x)):
if i == 0:
dif = x[i]
else:
dif -= x[i]
print(dif)
differ(1, 2)
1.什么是返回值
返回值就是return關(guān)鍵字后表達(dá)式的值(怎么確定返回值)
返回值就是函數(shù)調(diào)用表達(dá)式的值(怎么獲取函數(shù)的返回值)
(python中所有函數(shù)都有返回值,默認(rèn)None)
1)return
return是函數(shù)體中的關(guān)鍵字(只能在函數(shù)中使用)偎肃,作用有兩個(gè):結(jié)束函數(shù)煞烫,確定函數(shù)返回值
a.結(jié)束函數(shù);執(zhí)行函數(shù)體的時(shí)候只要遇到return函數(shù)直接結(jié)束
b.確定函數(shù)的返回值:return 返回值(可以是具體的數(shù)據(jù),聲明過的變量累颂,運(yùn)算表達(dá)式)
2)生么事函數(shù)調(diào)用表達(dá)式:
函數(shù)調(diào)用語(yǔ)句就是函數(shù)調(diào)用表達(dá)式滞详,例如:func(10),max([1, 2])
每個(gè)調(diào)用函數(shù)的語(yǔ)句都有結(jié)果紊馏,這個(gè)結(jié)果解釋調(diào)用這個(gè)函數(shù)的返回值
2.使用返回值
想要用函數(shù)的返回值料饥,就是使用函數(shù)調(diào)用表達(dá)式的值
普通數(shù)據(jù)能做的事情,函數(shù)調(diào)用表達(dá)式都可以做
3.什么時(shí)候需要返回值
看實(shí)現(xiàn)函數(shù)的功能會(huì)不會(huì)產(chǎn)生新的數(shù)據(jù)
多個(gè)返回值的寫法:
return 返回值1朱监,返回值2岸啡,...
def sum1(num1,num2):
return num1 + num2
a = sum1(1, 2)
print(a)