Python中如何为函数首参数或中间参数设置默认值?
Python中为函数首/中间参数设置默认值的解决方法
Python的语法规则明确要求:带默认值的参数必须位于无默认值参数的后方。这就是你给第一个参数b设默认值后,跟着无默认值的c、d会触发SyntaxError: non-default argument follows default argument的原因。
下面是两种可行的解决方式:
方案1:为后续无默认值参数也设置默认值
如果允许c、d也拥有默认值,可以直接给它们添加默认值,这样参数顺序不受限制:
class A(): def __init__(self, b="hey", c="默认c值", d="默认d值"): self.b = b self.c = c self.d = d
调用示例:
- 全部使用默认值:
a = A() - 仅修改部分参数:
a = A(c="自定义c") - 明确指定多个参数:
a = A(b="hi", d="自定义d")
方案2:用*强制后续参数使用关键字传递
如果不想给c、d设默认值,又要保留b的默认值,可以在参数列表中加入*,标记*之后的参数必须通过关键字传递:
class A(): def __init__(self, b="hey", *, c, d): self.b = b self.c = c self.d = d
调用时必须用关键字指定c和d:
- 使用
b的默认值:a = A(c="c的值", d="d的值") - 自定义
b的值:a = A(b="hi", c="c的值", d="d的值")
如果是给中间参数设默认值(比如b无默认,c有默认,d无默认),同样可以用*实现:
class A(): def __init__(self, b, *, c="hey", d): self.b = b self.c = c self.d = d
调用示例:
a = A("b的值", d="d的值") # 使用c的默认值 a = A("b的值", c="自定义c", d="d的值") # 自定义c的值
内容的提问来源于stack exchange,提问作者swarthy03
相关产品推荐
相关产品推荐

