当咱们但愿函数的某些参数强制使用关键字参数时,能够将强制关键字参数放到某个*后面就能获得这种效果。好比: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