python學習 函數

python 函數


參考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888

使用help(函數名)的方法查看函數的幫助信息

自定義函數如果沒有return也會返回結果, 爲Nonereturn None簡寫爲return

函數定義

定義一個什麼也不做的空函數,可以使用pass

def nop():
    pass

pass語句什麼都不做,可以用來爲沒想好的函數佔位,沒有pass就會報錯

內置函數可以檢查出參數類型的錯誤,而自定義函數不能

函數可以返回多個值(return多個值時,會以一個元組的方式返回)

函數參數

默認參數
#默認參數
def power(x, n = 2):
    #n值沒有傳參的話默認爲2
    s = 1
    while n > 0:
        n -= 1
        s *= x
    return s

設置默認參數時注意:

必選參數在前,默認參數在後,否則會報錯

函數有多個參數時,把變化大的參數放在前面,變化小的參數放後面,變化小的可以使用默認參數。

可以含有多個默認參數,調用時指定參數來傳遞數值

def stu(name, gender, age = 6, city = 'Beijing'):
    print(name)
    print(gender)
    print(age)
    print(city)
stu('a', 'f')
#a
#f
#6
#Beijing
stu('a', 'f', city = 'abc')
#a
#f
#6
#abc

函數在被定義的時候,默認參數就被計算出來了並指向這個對象,如果對象可變,下次調用函數時,參數內容就可能會改變。

所以,定義默認參數要牢記一點:默認參數必須指向不變對象!

可變參數

在參數前面加一個*號,該參數接收到的就是一個tuple

def cal(*num):
    sum = 0
    
    print(num)
    
    for i in num:
        sum += i
    return sum
cal(1, 2, 3)
#(1, 2, 3)
#6

#可以將一個list或是tuple作爲可變參數傳入,在變量名前加一個*
l = [1, 2, 3]
cal(*l)
#(1, 2, 3)
#6
關鍵字參數

可變參數允許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。而關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。

關鍵字參數有什麼用?它可以擴展函數的功能。比如,在person函數裏,我們保證能接收到nameage這兩個參數,但是,如果調用者願意提供更多的參數,我們也能收到。試想你正在做一個用戶註冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關鍵字參數來定義這個函數就能滿足註冊的需求。

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

函數person除了必選參數nameage外,還接受關鍵字參數kw。在調用該函數時,可以只傳入必選參數:

person('Michael', 30)
#name: Michael age: 30 other: {}

也可以傳入任意個數的關鍵字參數:

person('Bob', 35, city='Beijing')
#name: Bob age: 35 other: {'city': 'Beijing'}
person('Adam', 45, gender='M', job='Engineer')
#name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

和可變參數類似,也可以先組裝出一個dict,然後,把該dict轉換爲關鍵字參數傳進去:

extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, city=extra['city'], job=extra['job'])
#name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

當然,上面複雜的調用可以用簡化的寫法:

extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)
#name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

**extra表示把extra這個dict的所有key-value用關鍵字參數傳入到函數的**kw參數,kw將獲得一個dict,注意kw獲得的dict是extra的一份拷貝,對kw的改動不會影響到函數外的extra

命名關鍵字參數

如果要限制關鍵字參數的名字,就可以用命名關鍵字參數,例如,只接收cityjob作爲關鍵字參數。這種方式定義的函數如下:

def person(name, age, *, city, job):
    print(name, age, city, job)

和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符**後面的參數被視爲命名關鍵字參數。

調用方式如下:

person('Jack', 24, city='Beijing', job='Engineer')
#Jack 24 Beijing Engineer

如果函數定義中已經有了一個可變參數,後面跟着的命名關鍵字參數就不再需要一個特殊分隔符*了:

def person(name, age, *args, city, job):
    print(name, age, args, city, job)

命名關鍵字參數必須傳入參數名,這和位置參數不同。如果沒有傳入參數名,調用將報錯。

使用命名關鍵字參數時,要特別注意,如果沒有可變參數,就必須加一個*作爲特殊分隔符。如果缺少*,Python解釋器將無法識別位置參數和命名關鍵字參數。

參數組合

在Python中定義函數,可以用必選參數、默認參數、可變參數、關鍵字參數和命名關鍵字參數,這5種參數都可以組合使用。但是請注意,參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。

函數可以對list和tuple使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章