Python中*args支持接收哪些类型数据?传入列表变量报错是什么原因?
Python *args参数问题解答
1. *args支持接收的参数类型
args 是Python的可变位置参数标识,本身不对传入参数的类型做限制,整数、字符串、列表、字典、自定义类实例等任意类型都可传入。它的核心作用是将调用函数时传入的所有未匹配的零散位置参数,自动打包成一个元组*赋值给args变量,参数的类型合法性由函数内部的处理逻辑决定。
2. 传入列表/元组变量报错的原因
你提供的示例中,如果直接调用add_unlimited(numbers)会触发类型错误,原因如下:
- 直接传入多个零散数值
add_unlimited(23, 45, 23, 56)时,*args会把4个数值打包成元组(23, 45, 23, 56),循环时每次取出的都是整数,和sum变量的整数类型相加无异常。 - 直接传入列表变量
add_unlimited(numbers)时,整个列表会作为单个参数传入,*args打包后的结果是([23, 45, 23, 56],),循环第一次就会执行整数加列表的操作,不符合Python语法规则,因此报错。
3. 正确的列表/元组传参方式
调用函数时在列表/元组变量前加*解包符即可,它会把容器内的元素拆成零散的位置参数传入,和手动传入多个数值的效果完全一致:
def add_unlimited(*args): sum = 0 for n in args: sum += n print(sum) numbers = [23, 45, 23, 56] # 正确调用写法 add_unlimited(*numbers)
运行上述代码会输出正确的求和结果147。
内容的提问来源于stack exchange,提问作者karakusa
相关产品推荐
相关产品推荐

