Python學(xué)習(xí)之路(函數(shù)參數(shù))

函數(shù)參數(shù) 以及默認(rèn)參數(shù)

def getInfo(name, age, city) :
    return '我是%s,我今年%d歲了,我來(lái)自%s' %(name, age, city)
# print(getInfo('鄧鵬', 24)) # 報(bào)錯(cuò) 缺少 city 參數(shù)

def getInfo(name, age, city='四川') :
    return '我是%s,我今年%d歲了,我來(lái)自%s' %(name, age, city)
print(getInfo('鄧鵬', 24, '綿陽(yáng)'))

# 多個(gè)參數(shù) #默認(rèn)參數(shù) 一定要寫在參數(shù)列表最后

def getInfo1(name, age, city="四川", gender='男'):
    return '我叫%s, 性別%s, 我今年%d歲了,我來(lái)自%s' %(name, gender, age, city)
print(getInfo1('蔡姵儀', 23, '綿陽(yáng)', '女')) # 參數(shù)順序 必須正確
print(getInfo1('蔡姵儀', 23, gender='女')) # 參數(shù)順序 設(shè)置其中一個(gè)默認(rèn)參數(shù) 可帶上參數(shù)名

定義一個(gè)可變參數(shù)的函數(shù) 一般是list 或者 tuple

# 第一種定義方式:
def cacl(numbers):
    for x in numbers: 
        print(x) 
cacl([1,2,3]) # list 對(duì)象

cacl((4,5,6)) # tuple 對(duì)象

# cacl(1,2,3) # 報(bào)錯(cuò)  參數(shù)個(gè)數(shù)不對(duì)

# 第二種定義方式: *args  可變參數(shù)

def cacl2(*numbers): # 加個(gè)* 代表有多個(gè)參數(shù)
    for x in numbers:
        print(x)

cacl2(7,8,9)
cacl2(*[1.0,1.1,1.2]) # 如果傳入一個(gè)list 時(shí)  需將list里面的值作為參數(shù)傳過(guò)去 只需在list 前面加上* 即可

函數(shù)參數(shù)之關(guān)鍵字參數(shù)

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

obj = {
    'city': 'cd',
    'gender': 'women'
}

person('dp', 20, **obj)

# 命名關(guān)鍵字參數(shù)

def person1(name, age, *, city, job): # 2個(gè)位置參數(shù) name age 和 2個(gè)命名關(guān)鍵字參數(shù) city job  用*隔開(kāi)
    print(name, age, city, job)

person1('cpy', 24, city='cd', job='ww') # 傳入時(shí) 位置參數(shù)按順序傳入值即可, 命名參數(shù)則需以key=value形式 傳入

練習(xí)

寫一個(gè)可接收一個(gè)或多個(gè)數(shù)并計(jì)算乘積的函數(shù):

def product(*num):
    sum = 1
    for y in num:
        sum = sum * y
    return sum
# 測(cè)試
print('product(5) =', product(5))
print('product(5, 6) =', product(5, 6))
print('product(5, 6, 7) =', product(5, 6, 7))
print('product(5, 6, 7, 9) =', product(5, 6, 7, 9))
if product(5) != 5:
    print('測(cè)試失敗!')
elif product(5, 6) != 30:
    print('測(cè)試失敗!')
elif product(5, 6, 7) != 210:
    print('測(cè)試失敗!')
elif product(5, 6, 7, 9) != 1890:
    print('測(cè)試失敗!')
else:
    try:
        product()
        print('測(cè)試成功!')
    except TypeError:
        print('測(cè)試失敗!')

小結(jié)

Python的函數(shù)具有非常靈活的參數(shù)形態(tài),既可以實(shí)現(xiàn)簡(jiǎn)單的調(diào)用,又可以傳入非常復(fù)雜的參數(shù)。

默認(rèn)參數(shù)一定要用不可變對(duì)象,如果是可變對(duì)象,程序運(yùn)行時(shí)會(huì)有邏輯錯(cuò)誤!
要注意定義可變參數(shù)和關(guān)鍵字參數(shù)的語(yǔ)法:
*args是可變參數(shù),args接收的是一個(gè)tuple;
**kw是關(guān)鍵字參數(shù),kw接收的是一個(gè)dict。
以及調(diào)用函數(shù)時(shí)如何傳入可變參數(shù)和關(guān)鍵字參數(shù)的語(yǔ)法:
可變參數(shù)既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過(guò)*args傳入:func(*(1, 2, 3));
關(guān)鍵字參數(shù)既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過(guò)**kw傳入:func(**{'a': 1, 'b': 2})。
使用*args和**kw是Python的習(xí)慣寫法,當(dāng)然也可以用其他參數(shù)名,但最好使用習(xí)慣用法。
命名的關(guān)鍵字參數(shù)是為了限制調(diào)用者可以傳入的參數(shù)名,同時(shí)可以提供默認(rèn)值。
定義命名的關(guān)鍵字參數(shù)在沒(méi)有可變參數(shù)的情況下不要忘了寫分隔符*,否則定義的將是位置參數(shù)。

關(guān)注一波!喜歡一波!本人是前端菜鳥(niǎo),正在做自己的個(gè)人博客鄧鵬的博客,歡迎來(lái)交流學(xué)習(xí), 使用的技術(shù) vue + koa2 + mysql + php + nginx!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容