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
相关产品推荐
相关产品推荐

