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

Python3中one_star_type函数两次调用首次正常第二次报TypeError原因问询

问题原因

Python 原生不支持函数重载,同一作用域内重复定义同名函数时,后定义的版本会完全覆盖之前的定义,这就是你第二次调用抛出异常的核心原因。

  • 第一个版本的one_star_type参数中带*more,可以接收多余的位置参数。第一次调用传入1、2、3、4、5时,前两个参数对应a、b,剩余三个参数会被打包为元组传入more,所以运行正常,输出15和<class 'tuple'>。
  • 你后续定义了第二个同名的one_star_type,参数中带**c,仅能接收多余的关键字参数,不能接收额外的位置参数。此时旧版本的函数已经被完全替换为这个新版本。
  • 第二次调用one_star_type(1, 2, 3, 4, 5)时,使用的是仅支持2个位置参数的新版本,额外传入的3个位置参数没有对应的接收项,因此抛出TypeError。
修复方案

如果要同时保留两个不同逻辑的函数,给两个函数设置不同的名称即可,参考代码如下:

# 处理可变位置参数的函数
def sum_with_var_pos(a, b, *more):
    print(a + b + sum(more))
    print(type(more))

sum_with_var_pos(1, 2, 3, 4, 5)

# 处理可变关键字参数的函数
def accept_var_kw(a, b, **c):
    print(a, b, c)
    print(type(c))

def should_set_value(a, *, b=2, c=5):
    print(a, b, c)

# 调用对应函数即可正常运行
sum_with_var_pos(1, 2, 3, 4, 5)
# 可变关键字参数函数的调用示例
accept_var_kw(1, 2, c=3, d=4, e=5)

内容的提问来源于stack exchange,提问作者Aryan Gates

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:57:02