函數的參數

1.默認參數。定義默認參數要牢記一點:默認參數必須指向不變對象!
爲何要設計str、None這樣的不變對象呢?由於不變對象一旦建立,對象內部的數據就不能修改,這樣就減小了因爲修改數據致使的錯誤。此外,因爲對象不變,多任務環境下同時讀取對象不須要加鎖,同時讀一點問題都沒有。咱們在編寫程序時,若是能夠設計一個不變對象,那就儘可能設計成不變對象。app

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L

2.可變參數(參數前面加*)函數

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

print(calc(1, 2, 3))

3.關鍵字參數(**kw)
可變參數容許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。而關鍵字參數容許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。設計

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

person('Jack', 18)
person('Mike', 30, city='Beijing', job='Engineer')

4.命名關鍵字參數(*後面的參數被視爲命名關鍵字參數)
若是要限制關鍵字參數的名字,就能夠用命名關鍵字參數,例如,只接收city和job做爲關鍵字參數。code

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

# 若是函數定義中已經有了一個可變參數,後面跟着的命名關鍵字參數就再也不須要一個特殊分隔符*
def person2(name, age, *args, city, job):
    print(name, age, args, city, job)

# 命名關鍵字參數必須傳入參數名。因爲命名關鍵字參數city具備默認值,調用時,可不傳入city參數
person('Jack', 18, job='Engineer')
相關文章
相關標籤/搜索