Python基礎之只接收關鍵字參數的函數
阿新 • • 發佈:2018-11-25
也會 val mil 容易 調用 清晰 free function 可讀性
當我們希望函數的某些參數強制使用關鍵字參數時,可以將強制關鍵字參數放到某個*後面就能得到這種效果。比如:
def recv(maxsize, *, block): """接收一條消息""" pass recv(1024, True) #錯誤寫法會產生TypeError錯誤 #TypeError: recv() takes 1 positional argument but 2 were given recv(1024, block=True) #正確
使用這種方法,我們還能在接受任意多個位置參數的函數中指定關鍵字參數。比如:
def mininum(*values, clip=None): m = min(values) if clip is not None: m =clip if clip > m else m return m ret1 = mininum(1, 5, 2, -5, 10) print(ret1) #ret1 = -5 ret2 = mininum(1, 5, 2, -5, 10, clip=0) print(ret2) #ret2 = 0
在很多情況下,使用強制關鍵字參數會比使用位置參數表意更加清晰,程序也更加具有可讀性。例如,考慮一下下面這個函數調用:
msg = recv(1024, False)
如果調用者對recv函數不是很熟悉,那麽調用者就會不明白那個False參數是用來幹嘛的。
但是,如果代碼變成下面這樣,就清楚很多了。
msg = recv(1024, block=False)
另外,使用強制關鍵字參數也會比使用**kwargs參數更好,因為在使用函數help的時候輸出也會更容易理解:
>>>help(recv) Help on function recv in module __main__: recv(maxsize, *, block) 接受一條信息
強制關鍵字參數在一些更高級場合同樣也很有用。
比如說,它們可以被用來在使用*args和**kwargs參數作為輸入的函數中插入參數。
Python基礎之只接收關鍵字參數的函數