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参数作为输入的函数中插入参数。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,939评论 0 8
  • 中国目前有高血压患者两个亿,糖尿病患者1个亿,还有 1亿4千万的糖尿病的前期患者。 大家知道造成这些慢性病的真正原...
    中医药养生_涵锐阅读 183评论 0 0
  • 生命就好像石头上岁月刻蚀的印痕 每一笔和上一笔之间总脱不了干系 如果说生命终究还有一些意义的话 那也是它们共同作用...
    文心访艺阅读 130评论 0 0
  • 写在前面弄了下个人站...防止内容再次被锁定...所有东西都在这里面welcome~个人博客 回归C基础实现一个单...
    gwk_iOS阅读 1,397评论 3 3