Python學習之路(函數參數)

函數參數 以及默認參數

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!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。