Python3 - 只接受关键字参数的函数

问题

希望函数的某些参数强制使用关键字参数传递

解决方案

强制关键字参数 放到某个*参数或者单个*后面就能达到这种效果。比如:

def recv(maxsize, *, block):
    'Receives a message'
    pass

recv(1024, True) # TypeError
recv(1024, block=True) # Ok

利用这种方法,还能在接受任意多个位置参数的函数中指定关键字参数。比如:

def min_num(*nums, clip=None):
    m = min(nums)
    if clip is not None:
        m = clip if clip > m else m 
    return m

print(min_num(1, 5, 2, -5, 10))
-5

print(min_num(1, 5, 2, -5, 10, clip=0))
0

讨论

使用 强制关键字参数 会比使用 位置参数 表意更加清晰,程序也更加具有可读性。

使用 强制关键字参数 也会比使用**kwargs参数更好,因为在使用函数help的时候输出也会更容易理解。

强制关键字参数 在一些更高级场景同样也很有用。 例如,它们可以被用来在使用*args**kwargs参数作为输入的函数中插入参数。

你可能感兴趣的:(Python3 - 只接受关键字参数的函数)