1. 程式人生 > >Python基礎之只接收關鍵字參數的函數

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

也會 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基礎之只接收關鍵字參數的函數