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

如何跳过Python函数默认值参数,实现普通参数、*args与**kwargs的预期传值?

Python函数跳过默认值参数传值的解决方法

你的问题出在位置参数的分配逻辑上——第二个位置参数'2'会被自动赋值给q,覆盖了它的默认值。要实现跳过q直接传值给*args,有两种靠谱的方式:

方法一:把默认参数设为关键字-only参数(推荐)

调整函数定义,把*y放在默认参数q前面,这样q就变成了关键字-only参数,只能通过关键字传递,所有位置参数会被*y接收:

def f(x, *y, q='me', **z):
    print(x)
    print(q)
    print(y)
    print(z)

f('1', '2', '3', '4', '5', '6', '7', '8', m=9, n=10)

运行结果完全符合预期:

  • x = '1'
  • q = 'me'(默认值生效)
  • y = ('2', '3', '4', '5', '6', '7', '8')
  • z = {'m': 9, 'n': 10}

方法二:调用时显式指定默认值并解包位置参数

如果不想修改函数定义,你可以在调用时显式传递q='me',同时用*解包列表的方式把后续值传给*y(因为Python不允许位置参数出现在关键字参数之后):

def f(x, q='me', *y, **z):
    print(x)
    print(q)
    print(y)
    print(z)

f('1', q='me', *['2', '3', '4', '5', '6', '7', '8'], m=9, n=10)

这种方式也能达到预期效果,但写法不如第一种简洁直观。

内容的提问来源于stack exchange,提问作者Abdelmoumene Ferroukhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:47:45