函數的定義能簡化代碼的邏輯,對於函數的調用者來說,只需要知道如何正確的傳遞參數,以及知道函數將返回什么值就可以了,而函數內部的復雜邏輯被封裝起來,調用者不必了解。
位置參數
調用函數時,傳入實參的值按照位置順序以此賦給形參。
def power(x, n): s = 1 while( n ): n = n - 1 s = s * x return s
上面這個函數中的x和n就是位置參數。
默認參數
python的函數同時還允許你給函數的參數設置默認值,當調用者沒有給出參數的值時自動使用默認值。設置默認參數時要注意,必選參數必須在默認參數之前。
def power(x, n = 2): s = 1 while( n ): n = n - 1 s = s * x return s
注意:默認參數必須指向不可變對象,否則會發生不可預知的錯誤。
可變參數
在Python函數中還可以定義可變的參數,參數的個數可以是任意個,定義參數時,只需要在參數的前面加一個 * 符號即可。
def N(×num): s = 1 for n in num: s = s * n return s A = N(1,2,3,4,5,6,7,8,9,10) #A = 3628800
關鍵字參數
python的關鍵字參數允許你傳入任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict。傳入關鍵字參數的時候必須指定參數的名稱(參數名由調用者自行取定),否則該參數會被認為是位置參數從而報錯。
def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) preson("J",33,city = "Beaijing",job = "Engineer")
命名關鍵字參數
命名關鍵字參數:調用者傳遞參數必須給出參數名,而且參數名是函數定義者預先定義好的。
def person(name, age, *, city, job): print(name, age, city, job) #如果函數的參數中有可變參數,那么后面的命名關鍵字參數就不需要 * 符號來定義了 def person(name, age, *args, city, job): print(name, age, args,city, job)
總結:對於任意函數,都可以通過類似func(*args,**kw)的形式調用它,無論它的參數形式是怎樣的。