You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:12:00