函數(shù)參數(shù) 以及默認(rèn)參數(shù)
def getInfo(name, age, city) :
return '我是%s幼驶,我今年%d歲了疮胖,我來自%s' %(name, age, city)
# print(getInfo('鄧鵬', 24)) # 報(bào)錯(cuò) 缺少 city 參數(shù)
def getInfo(name, age, city='四川') :
return '我是%s,我今年%d歲了,我來自%s' %(name, age, city)
print(getInfo('鄧鵬', 24, '綿陽'))
# 多個(gè)參數(shù) #默認(rèn)參數(shù) 一定要寫在參數(shù)列表最后
def getInfo1(name, age, city="四川", gender='男'):
return '我叫%s, 性別%s, 我今年%d歲了,我來自%s' %(name, gender, age, city)
print(getInfo1('蔡姵儀', 23, '綿陽', '女')) # 參數(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 對象
cacl((4,5,6)) # tuple 對象
# cacl(1,2,3) # 報(bào)錯(cuò) 參數(shù)個(gè)數(shù)不對
# 第二種定義方式: *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ù)傳過去 只需在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 用*隔開
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
# 測試
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('測試失敗!')
elif product(5, 6) != 30:
print('測試失敗!')
elif product(5, 6, 7) != 210:
print('測試失敗!')
elif product(5, 6, 7, 9) != 1890:
print('測試失敗!')
else:
try:
product()
print('測試成功!')
except TypeError:
print('測試失敗!')
小結(jié)
Python的函數(shù)具有非常靈活的參數(shù)形態(tài),既可以實(shí)現(xiàn)簡單的調(diào)用,又可以傳入非常復(fù)雜的參數(shù)阳惹。
默認(rèn)參數(shù)一定要用不可變對象,如果是可變對象眶俩,程序運(yùn)行時(shí)會(huì)有邏輯錯(cuò)誤莹汤!
要注意定義可變參數(shù)和關(guān)鍵字參數(shù)的語法:
*args是可變參數(shù),args接收的是一個(gè)tuple颠印;
**kw是關(guān)鍵字參數(shù)纲岭,kw接收的是一個(gè)dict。
以及調(diào)用函數(shù)時(shí)如何傳入可變參數(shù)和關(guān)鍵字參數(shù)的語法:
可變參數(shù)既可以直接傳入:func(1, 2, 3)线罕,又可以先組裝list或tuple止潮,再通過*args傳入:func(*(1, 2, 3));
關(guān)鍵字參數(shù)既可以直接傳入:func(a=1, b=2)钞楼,又可以先組裝dict喇闸,再通過**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ù)在沒有可變參數(shù)的情況下不要忘了寫分隔符*逗旁,否則定義的將是位置參數(shù)。
關(guān)注一波舆瘪!喜歡一波片效!本人是前端菜鳥,正在做自己的個(gè)人博客鄧鵬的博客英古,歡迎來交流學(xué)習(xí)淀衣, 使用的技術(shù) vue + koa2 + mysql + php + nginx!