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参数做为输入的函数中插入参数。
相关文章
相关标签/搜索