函數參數 以及默認參數
def getInfo(name, age, city) :
return '我是%s,我今年%d歲了,我來自%s' %(name, age, city)
# print(getInfo('鄧鵬', 24)) # 報錯 缺少 city 參數
def getInfo(name, age, city='四川') :
return '我是%s,我今年%d歲了,我來自%s' %(name, age, city)
print(getInfo('鄧鵬', 24, '綿陽'))
# 多個參數 #默認參數 一定要寫在參數列表最后
def getInfo1(name, age, city="四川", gender='男'):
return '我叫%s, 性別%s, 我今年%d歲了,我來自%s' %(name, gender, age, city)
print(getInfo1('蔡姵儀', 23, '綿陽', '女')) # 參數順序 必須正確
print(getInfo1('蔡姵儀', 23, gender='女')) # 參數順序 設置其中一個默認參數 可帶上參數名
定義一個可變參數的函數 一般是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) # 報錯 參數個數不對
# 第二種定義方式: *args 可變參數
def cacl2(*numbers): # 加個* 代表有多個參數
for x in numbers:
print(x)
cacl2(7,8,9)
cacl2(*[1.0,1.1,1.2]) # 如果傳入一個list 時 需將list里面的值作為參數傳過去 只需在list 前面加上* 即可
函數參數之關鍵字參數
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
obj = {
'city': 'cd',
'gender': 'women'
}
person('dp', 20, **obj)
# 命名關鍵字參數
def person1(name, age, *, city, job): # 2個位置參數 name age 和 2個命名關鍵字參數 city job 用*隔開
print(name, age, city, job)
person1('cpy', 24, city='cd', job='ww') # 傳入時 位置參數按順序傳入值即可, 命名參數則需以key=value形式 傳入
練習
寫一個可接收一個或多個數并計算乘積的函數:
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('測試失敗!')
小結
Python的函數具有非常靈活的參數形態,既可以實現簡單的調用,又可以傳入非常復雜的參數。
默認參數一定要用不可變對象,如果是可變對象,程序運行時會有邏輯錯誤!
要注意定義可變參數和關鍵字參數的語法:
*args是可變參數,args接收的是一個tuple;
**kw是關鍵字參數,kw接收的是一個dict。
以及調用函數時如何傳入可變參數和關鍵字參數的語法:
可變參數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過*args傳入:func(*(1, 2, 3));
關鍵字參數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過**kw傳入:func(**{'a': 1, 'b': 2})。
使用*args和**kw是Python的習慣寫法,當然也可以用其他參數名,但最好使用習慣用法。
命名的關鍵字參數是為了限制調用者可以傳入的參數名,同時可以提供默認值。
定義命名的關鍵字參數在沒有可變參數的情況下不要忘了寫分隔符*,否則定義的將是位置參數。
關注一波!喜歡一波!本人是前端菜鳥,正在做自己的個人博客鄧鵬的博客,歡迎來交流學習, 使用的技術 vue + koa2 + mysql + php + nginx!