为何sum(args)可正常运行而sum(*args)会报错?
问题解析:为什么要去掉args前的
*符号? 首先得搞懂*args在函数里的作用:当你定义函数用*args时,Python会把你传入的所有位置参数打包成一个元组。比如你调用super_func(1,2)时,args就是(1,2)这个元组。
然后看sum()函数的要求:它的第一个参数必须是可迭代对象(比如列表、元组这类能逐个取出元素的东西),可选第二个参数是求和的起始值。
那原来的代码return sum(*args),这里的*是把args这个元组解包,相当于调用sum(1,2)。这时候sum会把第一个参数1当成要遍历的可迭代对象,但int类型根本不是可迭代的,自然就报TypeError: 'int' object is not iterable的错。
而改成return sum(args)后,你直接把元组(1,2)传给sum,sum就能正常遍历这个元组里的元素,把1和2加起来得到3,问题就解决了。
内容的提问来源于stack exchange,提问作者Yıldıray Y
相关产品推荐
相关产品推荐

