Python函數
參數
- 必選參數
- 默認參數
- 可變參數
- 關鍵字參數
- 命名關鍵字參數
必選參數
必選參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣
例:
def fun(x,n):
s = 1
while n>0:
n = n-1
s = s*x
return s
print(fun(3,4))
輸出結果:
81
默認參數
默認參數可以簡化函數的調用
- 必選參數在前,默認參數在後
- 可以不按順序提供部分默認參數。當不按順序提供部分默認參數時,需要把參數名寫上
默認參數必須指向不變對象
例:
def fun(x,n=2):
s = 1
while n>0:
n = n-1
s = s*x
return s
print(func(5))
輸出結果:
25
思考:爲什麼默認參數不能放在必選參數前面?
可變參數
- 可變參數允許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個
tuple
例:
def func(*number):
sum = 0
for num in number:
sum += num
return sum
print(func(2,3,5))
輸出結果:
10
- 當存在一個
list
或tuple
時,需要調用一個可變參數時可以這樣做:
nums = [1,2,3,4]
func(*nums)
關鍵字參數
- 關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個
dict
- 函數的調用者可以傳入任意不受限制的關鍵字參數
命名關鍵字參數
- 要限制關鍵字參數的名字,就可以用命名關鍵字參數
- 命名關鍵字參數需要一個特殊分隔符
*
,*
後面的參數被視爲命名關鍵字參數
例:
def person(name, age, *, city, job):
print(name, age, city, job)
- 命名關鍵字參數可以有缺省值
特別注意:
如果沒有可變參數,就必須加一個作爲特殊分隔符。如果缺少,Python解釋器將無法識別位置參數和命名關鍵字參數
參數組合
- 可以用必選參數、默認參數、可變參數、關鍵字參數和命名關鍵字參數,這5種參數都可以組合使用
- 參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數、關鍵字參數
雖然可以組合多達5種參數,但不要同時使用太多的組合,否則函數接口的可理解性很差。
小結
- 默認參數一定要用不可變對象,如果是可變對象,程序運行時會有邏輯錯誤
- 要注意定義可變參數和關鍵字參數的語法
*args
是可變參數,args
接收的是一個tuple
**kw
是關鍵字參數,kw
接收的是一個dict
- 命名的關鍵字參數是爲了限制調用者可以傳入的參數名,同時可以提供默認值
- 定義命名的關鍵字參數在沒有可變參數的情況下不要忘了寫分隔符
*
,否則定義的將是位置參數 - 使用
*args
和**kw
是Python
的習慣寫法,當然也可以用其他參數名,但最好使用習慣用法