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
在很多情况下,使用强制关键字参数会比使用位置参数表意更加清晰,程序也更加具有可读性。例如,考虑一下下面这个函数调用:
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参数作为输入的函数中插入参数。