1.函數(shù)的聲明
1)什么是函數(shù)
函數(shù)就是對(duì)實(shí)現(xiàn)某一特定功能的代碼的封裝
2)函數(shù)的分類(lèi)
按照函數(shù)是誰(shuí)來(lái)聲明的將函數(shù)分為系統(tǒng)函數(shù)和自定義函數(shù)
- 系統(tǒng)函數(shù):由系統(tǒng)聲明,程序員直接使用的函數(shù)。例如:print/input/hex/length/sum/max/min等
- 自定義函數(shù):由程序員自己聲明的函數(shù)
3)函數(shù)的聲明(定義)
a.語(yǔ)法:
def 函數(shù)名(參數(shù)列表):
函數(shù)說(shuō)明文檔
函數(shù)體
b.說(shuō)明
def - python聲明函數(shù)的關(guān)鍵字叫潦,固定寫(xiě)法
函數(shù)名 - 程序員自己命名嫩痰;
要求:是標(biāo)識(shí)符君纫,不能是關(guān)鍵字
規(guī)范:PEP命名規(guī)范钉稍;見(jiàn)名知義(看到函數(shù)名大概知道函數(shù)的功能)拦止;不能使用系統(tǒng)函數(shù)名或者類(lèi)名
() - 固定寫(xiě)法
參數(shù)列表 - 這兒的參數(shù)叫形參屠尊;以'變量名1旷祸,變量名2,...'的形式存在
它的作用是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里面
: - 固定寫(xiě)法
函數(shù)說(shuō)明文檔 - 使用三個(gè)雙引號(hào)引起來(lái)的文本信息
函數(shù)體 - 和def保持一個(gè)縮進(jìn)的一條或者多條語(yǔ)句讼昆。就是實(shí)現(xiàn)函數(shù)功能的代碼段
c.初學(xué)者聲明函數(shù)的步驟
1.確定函數(shù)功能
2.根據(jù)功能確定函數(shù)名
3.確定函數(shù)的參數(shù)托享;看實(shí)現(xiàn)函數(shù)的功能需不需要額外的數(shù)據(jù),需要幾個(gè)
4.實(shí)現(xiàn)函數(shù)的功能
5.寫(xiě)函數(shù)說(shuō)明文檔
d.注意:函數(shù)在聲明的時(shí)候不會(huì)執(zhí)行函數(shù)體,調(diào)用的時(shí)候才會(huì)執(zhí)行(重要闰围!)
寫(xiě)一個(gè)函數(shù)赃绊,求兩個(gè)數(shù)的和
def ysy_sum(num1, num2):
"""
功能說(shuō)明:求兩個(gè)數(shù)的和
:param num1: 參數(shù)說(shuō)明 - 數(shù)字
:param num2: 參數(shù)說(shuō)明 - 數(shù)字
:return: 返回和的值
"""
sum1 = num1 + num2
return sum1
print(ysy_sum(1, 2))
練習(xí):寫(xiě)一個(gè)函數(shù),打印指定字符串中所有的中文字符
def c_char(str1):
"""
功能說(shuō)明:求指定字符串中所有的中文字符
:param str1: 指定的字符串
:return: 返回一個(gè)包含所有中文的新的字符串
"""
str2 = ''
for chars in str1:
if '\u4e00' <= chars <= '\u9fa5':
str2 += chars
return str2
print(c_char('as12哈哈9你好1q'))
4)函數(shù)的調(diào)用
a.語(yǔ)法
函數(shù)(實(shí)參列表)
b.說(shuō)明
函數(shù)名 - 已經(jīng)聲明過(guò)的函數(shù)名
() - 固定寫(xiě)法
實(shí)參列表 - 以‘值1羡榴,值2碧查,值3,...’的形式存在校仑;實(shí)參是用來(lái)給形參賦值的
c.注意:同一個(gè)函數(shù)可以調(diào)用多次
2.函數(shù)的調(diào)用
1)函數(shù)的調(diào)用過(guò)程
1)回到函數(shù)聲明的位置
2)用實(shí)參給形參賦值(傳參)忠售;傳參的時(shí)候要保證每個(gè)參數(shù)都有值
3)執(zhí)行函數(shù)體
4)確定函數(shù)的返回值
5)回到函數(shù)調(diào)用的位置,接著往后執(zhí)行迄沫。
def ysy_sum(num1, num2):
# num1 = 1, num2 = 2
print(num1 + num2)
ysy_sum(1, 2)
3.函數(shù)的參數(shù)
1)參數(shù)分類(lèi)
1.位置參數(shù)和關(guān)鍵字參數(shù)(實(shí)參分類(lèi))
a.位置參數(shù):讓實(shí)參和形參一一對(duì)應(yīng)稻扬,來(lái)給不同的形參賦不同的值
b.關(guān)鍵字參數(shù):以'參數(shù)名1=值1款熬,參數(shù)名2=值2王悍,...'的形式來(lái)傳參
注意:1.如果位置參數(shù)和關(guān)鍵字參數(shù)同時(shí)存在的時(shí)候,位置參數(shù)必須放在關(guān)鍵字參數(shù)的前面
2.如果希望跳過(guò)前面某個(gè)闻坚、某幾個(gè)參數(shù)尘吗,直接給后面的參數(shù)賦值逝她,就必須使用關(guān)鍵字參數(shù)
def func1(x, y, z):
print(x, y, z)
# 位置參數(shù)
func1(1, 2, 3)
# 關(guān)鍵字參數(shù)
func1(x=1, y=1, z=1)
func1(y=2, x=1, z=3)
# 位置參數(shù)+關(guān)鍵字參數(shù)
func1(3, z=2, y=1)
2.參數(shù)默認(rèn)值 - 形參
聲明函數(shù)的時(shí)候,可以給形參賦默認(rèn)值摇予;已經(jīng)有默認(rèn)值的參數(shù)在調(diào)用的時(shí)候可以不用傳參
注意:沒(méi)有默認(rèn)值的參數(shù)必須放在有默認(rèn)值參數(shù)的前面
def func2(x, y=2, z=1):
print(x, y, z)
func2(1, z=2)
3.參數(shù)類(lèi)型說(shuō)明
a.給參數(shù)設(shè)置默認(rèn)值汽绢,默認(rèn)值的類(lèi)型就是參數(shù)類(lèi)型
b.形參:類(lèi)型名
4.不定長(zhǎng)參數(shù) - 參數(shù)個(gè)數(shù)不確定
a.在參數(shù)名前加吗跋,那么這個(gè)參數(shù)就會(huì)變成一個(gè)元組去接收多個(gè)參數(shù)侧戴,調(diào)用的時(shí)候不能使用關(guān)鍵字參數(shù)傳參
b.在參數(shù)名前加*,那么這個(gè)參數(shù)就會(huì)變成一個(gè)字典去接收多個(gè)參數(shù)跌宛,調(diào)用的時(shí)候只能使用關(guān)鍵字參數(shù)傳參
# 計(jì)算多個(gè)數(shù)的和
def ysy_sum(*num):
print(sum(num))
ysy_sum(1, 2, 3)
def func5(x, *y):
print(x)
print(y)
func5('ab', 1, '1s')
def func6(**num):
print(num)
func6()
# func6(1) # TypeError: func6() takes 0 positional arguments but 1 was given
func6(x=10)
func6(x=1, y=2)