當咱們但願函數的某些參數強制使用關鍵字參數時,能夠將強制關鍵字參數放到某個*後面就能獲得這種效果。好比:python
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
在不少狀況下,使用強制關鍵字參數會比使用位置參數表意更加清晰,程序也更加具備可讀性。例如,考慮一下下面這個函數調用:spa
msg = recv(1024, False)
若是調用者對recv函數不是很熟悉,那麼調用者就會不明白那個False參數是用來幹嗎的。code
可是,若是代碼變成下面這樣,就清楚不少了。blog
msg = recv(1024, block=False)
另外,使用強制關鍵字參數也會比使用**kwargs參數更好,由於在使用函數help的時候輸出也會更容易理解:ip
>>>help(recv) Help on function recv in module __main__: recv(maxsize, *, block) 接受一條信息
強制關鍵字參數在一些更高級場合一樣也頗有用。it