Python基礎之只接收關鍵字參數的函數

當咱們但願函數的某些參數強制使用關鍵字參數時,能夠將強制關鍵字參數放到某個*後面就能獲得這種效果。好比: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

好比說,它們能夠被用來在使用*args和**kwargs參數做爲輸入的函數中插入參數。
相關文章
相關標籤/搜索