Python星号语法作用及keyword-only arguments规则问询
问题1:Python中函数定义的参数列表里,无任何参数跟随的单独星号代表什么含义?
这个单独的星号*是参数分隔标识,作用是标记位置参数的结束。所有出现在这个星号后面的参数,都只能通过关键字传参的方式传入,不能按位置顺序匹配传参。
举个示例:
def demo(a, *, b): return a + b # 合法调用 demo(1, b=2) # 非法调用,会抛出TypeError,b不能按位置传参 demo(1, 2)
问题2:调用choice函数前添加的星号有什么作用?
调用函数时在可迭代对象前加*是序列解包操作,会把可迭代对象(列表、元组、集合等)里的每个元素拆解成独立的位置参数传给被调用的函数。
举个示例:
params = [1, 3, 5, 7] # 等同于choice(1, 3, 5, 7) choice(*params)
问题3:该语法是如何强制Python使用keyword-only arguments的?
当函数定义中出现单独的*作为参数分隔符时,Python解析器会做两个判定:
*之前的参数属于常规参数,支持位置传参、关键字传参两种方式*之后的所有参数都会被标记为「仅关键字参数(keyword-only arguments)」,解析器不会把调用时传入的位置参数匹配到这部分参数上,只要没有显式用参数名传值,就会直接抛出参数不匹配的异常,由此实现强制关键字传参的效果。
内容的提问来源于stack exchange,提问作者Bilal Fawad Khan
相关产品推荐
相关产品推荐

