1.函數(shù)的聲明
1)什么是函數(shù)
函數(shù)就是對實(shí)現(xiàn)某一特定功能的代碼的封裝
2)函數(shù)的分類
按照函數(shù)是誰來聲明的將函數(shù)分為系統(tǒng)函數(shù)和自定義函數(shù)
- 系統(tǒng)函數(shù):由系統(tǒng)聲明,程序員直接使用的函數(shù)。例如:print/input/hex/length/sum/max/min等
- 自定義函數(shù):由程序員自己聲明的函數(shù)
3)函數(shù)的聲明(定義)
a.語法:
def 函數(shù)名(參數(shù)列表):
函數(shù)說明文檔
函數(shù)體
b.說明
def - python聲明函數(shù)的關(guān)鍵字,固定寫法
函數(shù)名 - 程序員自己命名;
要求:是標(biāo)識符,不能是關(guān)鍵字
規(guī)范:PEP命名規(guī)范;見名知義(看到函數(shù)名大概知道函數(shù)的功能);不能使用系統(tǒng)函數(shù)名或者類名
() - 固定寫法
參數(shù)列表 - 這兒的參數(shù)叫形參;以'變量名1,變量名2,...'的形式存在
它的作用是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里面
: - 固定寫法
函數(shù)說明文檔 - 使用三個(gè)雙引號引起來的文本信息
函數(shù)體 - 和def保持一個(gè)縮進(jìn)的一條或者多條語句。就是實(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.寫函數(shù)說明文檔
d.注意:函數(shù)在聲明的時(shí)候不會執(zhí)行函數(shù)體,調(diào)用的時(shí)候才會執(zhí)行(重要!)
寫一個(gè)函數(shù),求兩個(gè)數(shù)的和
def ysy_sum(num1, num2):
"""
功能說明:求兩個(gè)數(shù)的和
:param num1: 參數(shù)說明 - 數(shù)字
:param num2: 參數(shù)說明 - 數(shù)字
:return: 返回和的值
"""
sum1 = num1 + num2
return sum1
print(ysy_sum(1, 2))
練習(xí):寫一個(gè)函數(shù),打印指定字符串中所有的中文字符
def c_char(str1):
"""
功能說明:求指定字符串中所有的中文字符
: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.語法
函數(shù)(實(shí)參列表)
b.說明
函數(shù)名 - 已經(jīng)聲明過的函數(shù)名
() - 固定寫法
實(shí)參列表 - 以‘值1,值2,值3,...’的形式存在;實(shí)參是用來給形參賦值的
c.注意:同一個(gè)函數(shù)可以調(diào)用多次
2.函數(shù)的調(diào)用
1)函數(shù)的調(diào)用過程
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ù)分類
1.位置參數(shù)和關(guān)鍵字參數(shù)(實(shí)參分類)
a.位置參數(shù):讓實(shí)參和形參一一對應(yīng),來給不同的形參賦不同的值
b.關(guān)鍵字參數(shù):以'參數(shù)名1=值1,參數(shù)名2=值2,...'的形式來傳參
注意:1.如果位置參數(shù)和關(guān)鍵字參數(shù)同時(shí)存在的時(shí)候,位置參數(shù)必須放在關(guān)鍵字參數(shù)的前面
2.如果希望跳過前面某個(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í)候可以不用傳參
注意:沒有默認(rèn)值的參數(shù)必須放在有默認(rèn)值參數(shù)的前面
def func2(x, y=2, z=1):
print(x, y, z)
func2(1, z=2)
3.參數(shù)類型說明
a.給參數(shù)設(shè)置默認(rèn)值,默認(rèn)值的類型就是參數(shù)類型
b.形參:類型名
4.不定長參數(shù) - 參數(shù)個(gè)數(shù)不確定
a.在參數(shù)名前加,那么這個(gè)參數(shù)就會變成一個(gè)元組去接收多個(gè)參數(shù),調(diào)用的時(shí)候不能使用關(guān)鍵字參數(shù)傳參
b.在參數(shù)名前加*,那么這個(gè)參數(shù)就會變成一個(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)