1.什么是函數(shù)
函數(shù)就是對(duì)實(shí)現(xiàn)某一特定功能的代碼的封裝
2.函數(shù)的分類(lèi)
'''
系統(tǒng)函數(shù):系統(tǒng)自己定義的函數(shù)(不需要程序去實(shí)現(xiàn)), 程序猿直接使用兽泄。例如:print(),input()等等
自定義函數(shù):程序猿自己實(shí)現(xiàn)函數(shù)
'''
3.聲明函數(shù)
'''
1)語(yǔ)法
def 函數(shù)名(參數(shù)列表):
函數(shù)體
2)
def — 聲明函數(shù)關(guān)鍵字
函數(shù)名 - 是標(biāo)識(shí)符奏篙,不能是關(guān)鍵字
PEP8命名規(guī)范(所有字母都小寫(xiě)续室,多個(gè)單詞用下劃線(xiàn)隔開(kāi))摇零;
見(jiàn)名知義(根據(jù)名字能夠大概知道函數(shù)的功能)
() - 固定寫(xiě)法
參數(shù)列表 - 又叫形參历帚,以‘變量名1锋恬,變量名2屯换,···’的形式出現(xiàn)
形參可以沒(méi)有,也可以多個(gè)
將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里面
函數(shù)體 - 由函數(shù)說(shuō)明文檔和實(shí)現(xiàn)函數(shù)功能的一條或者多條語(yǔ)句
3)初學(xué)聲明函數(shù)的過(guò)程
a. 確定函數(shù)功能
b. 根據(jù)功能去確定函數(shù)名
c. 確定形參:看實(shí)現(xiàn)函數(shù)的功能需不需要從函數(shù)外面?zhèn)鲾?shù)據(jù)伶氢,需要數(shù)據(jù)就對(duì)應(yīng)一個(gè)參數(shù)
d .實(shí)現(xiàn)函數(shù)的功能
e .確定返回值
L司丁1窭簟!蜗巧!注意:聲明函數(shù)的時(shí)后不會(huì)執(zhí)行函數(shù)體掌眠!只有調(diào)用函數(shù)的時(shí)候才會(huì)執(zhí)行函數(shù)體
'''
寫(xiě)一個(gè)函數(shù)求兩個(gè)數(shù)的和
def yt_sum(num1, num2):
"""
1)函數(shù)功能說(shuō)明:求兩個(gè)數(shù)的和
:param num1: 參數(shù)說(shuō)明,要求是一個(gè)數(shù)字
:param num2: 參數(shù)說(shuō)明
:return: 返回值說(shuō)明:
"""
def yt_sum(num1, num2):
print(num1 + num2)
4.函數(shù)的調(diào)用
'''
調(diào)用函數(shù)就是使用函數(shù)
1)語(yǔ)法
函數(shù)名(實(shí)參列表)
2)說(shuō)明
函數(shù)名 — 已經(jīng)聲明過(guò)的函數(shù)名
() - 固定寫(xiě)法
實(shí)參列表 - 實(shí)參是給形參賦值的幕屹;實(shí)參是具體的值蓝丙,比如:數(shù)據(jù), 已經(jīng)賦值過(guò)的變量望拖,運(yùn)算表達(dá)式(不能是賦值語(yǔ)句)
3)函數(shù)調(diào)用過(guò)程
第一步:回到函數(shù)聲明的位置
第二步:傳參渺尘;用實(shí)參給形參賦值
第三步:執(zhí)行函數(shù)體
第四步:執(zhí)行完函數(shù)體,回到函數(shù)調(diào)用的位置接著往后執(zhí)行
'''
yt_sum(20, 30)
練習(xí)1:求三個(gè)數(shù)的最大值
def max_num(num1, num2, num3):
max1 = num1
if max1 < num2:
max1 = num2
if max1 < num3:
max1 = num3
print(max1)
max_num(2, 4, 6)
練習(xí)2:寫(xiě)一個(gè)函數(shù)判斷一個(gè)字符串中是否有中文字符
def chinese_char(str1):
for ch in str1:
if '\u4e00'<= ch <= '\u9fa5':
print('%s中包含中文字符' % str1)
break
else:
print('%s中不包含中文字符' % str1)
chinese_char('ag啥技術(shù)')
練習(xí)3:寫(xiě)一個(gè)函數(shù)實(shí)現(xiàn)將一個(gè)數(shù)據(jù)插入到列表的最前面
def insert_front(list1, item):
list1.insert(0, item)
print(list1)
nums = [1, 3, 5, 100]
insert_front(nums, 200)
函數(shù)的參數(shù)
1.位置參數(shù)和關(guān)鍵字參數(shù)(實(shí)參)
'''
1)位置參數(shù):讓實(shí)參和形參的位置一一對(duì)應(yīng)
2).關(guān)鍵字參數(shù): 調(diào)用函數(shù)的時(shí)候说敏,以’形參=實(shí)參‘的形式傳參鸥跟;位置可以亂
注意:1:不管使用哪種方式傳參,要保證每個(gè)參數(shù)都有值
2:如果既有位置參數(shù)又有關(guān)鍵字參數(shù)盔沫,位置參數(shù)一定要在關(guān)鍵字參數(shù)的前面
'''
def fun1(x, y, z):
print('x:%s y:%s z:%s' % (x, y, z))
#### 位置參數(shù)
fun1(10, 20, 30)
####關(guān)鍵字參數(shù)
fun1(x=100, y=200, z=300)
2.參數(shù)默認(rèn)值(形參)
'''
聲明函數(shù)的時(shí)候可以給參數(shù)設(shè)置默認(rèn)值医咨,以'形參=值'的方式來(lái)設(shè)置
設(shè)置了默認(rèn)值的參數(shù),在調(diào)用函數(shù)的時(shí)候可以不用傳參
如果有的參數(shù)有默認(rèn)值架诞,有的參數(shù)沒(méi)有默認(rèn)值拟淮;有默認(rèn)值的參數(shù)必須放在沒(méi)有默認(rèn)值參數(shù)的后面
'''
def func2(x=10, y=20, z=30):
print('x:%s y:%s z:%s' % (x, y, z))
func2()
func2(99, 89, 80)
func2(z=999) # 跳過(guò)前面的參數(shù)直接給后面的參數(shù)傳參
def func3(x, z, y=998):
print('x:%s y:%s z:%s' % (x, y, z))
func3(10, 20)
3.參數(shù)類(lèi)型的說(shuō)明
'''
1)賦默認(rèn)值
2)以’形參:類(lèi)型名‘的方式說(shuō)明類(lèi)型
對(duì)參數(shù)類(lèi)型進(jìn)行說(shuō)明可以引導(dǎo)函數(shù)調(diào)用者正確的傳參;也可以讓實(shí)現(xiàn)函數(shù)體的時(shí)候代碼有提示
'''
def func4(x: list, y: str, z=0):
print(x, y, z)
func4()
4.不定長(zhǎng)參數(shù)
'''
1)
聲明函數(shù)的時(shí)候在參數(shù)前加谴忧,就變成不定長(zhǎng)參數(shù)了很泊,可以同時(shí)接受多個(gè)實(shí)參
(不定長(zhǎng)參數(shù)實(shí)質(zhì)就是一個(gè)元祖,接收到的實(shí)參就是元祖的元素)
帶一個(gè)的不定長(zhǎng)參數(shù)沾谓,調(diào)用的時(shí)候需要使用位置參數(shù)
2)聲明函數(shù)的時(shí)候在參數(shù)前加**委造,就變成不定長(zhǎng)參數(shù)了,可以同時(shí)接受多個(gè)實(shí)參
(實(shí)質(zhì)是一個(gè)字典搏屑,調(diào)用的時(shí)候必須使用關(guān)鍵字參數(shù))
注意:參數(shù)中帶的參數(shù)需要放在不帶參數(shù)的后面
帶一個(gè)需要放在帶兩個(gè)的前面
面試題:
def func(*args, **kwargs)
pass
既可以用位置參數(shù)又可以用關(guān)鍵字參數(shù)接受多個(gè)實(shí)參
'''
寫(xiě)一個(gè)函數(shù)求多個(gè)數(shù)的和:yt_sum(1, 2)争涌,yt_sum(2, 67辣恋, 78)
def yt_sum(*nums):
print(sum(nums))
yt_sum(1, 3, 5, 6)
def student_info(name, *scores):
print(name, scores)
student_info('小明', 89)
student_info('小明', 89, 79, 90, 78)
def func11(**x):
print(x)
func11(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
def func15(*args, **kwargs):
print(args, kwargs)
func15(1, 2, 3) # (1, 2, 3) {}
func15(a=1, b=99) # () {'a': 1, 'b': 99}
func15(1, 2, 3, a=1, b=99) # (1, 2, 3) {'a': 1, 'b': 99}