函數(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!