我在关于打包的教程中看到了下面的函数
我的疑问在于sum()
,它将Counter()
作为start参数。在这种情况下会发生什么
# Import needed functionality
from collections import Counter
def sum_counters(counters):
# Sum the inputted counters
return sum(counters, Counter())
我尝试使用下面的代码进行复制
a=[2,3,3,4,5,5,6]
sum(a,len())
结果:
TypeError: len() takes exactly one argument (0 given)
我无法用Counter()
复制它(由于下载collections包时pip中出现错误),也找不到任何提到将函数作为开始参数的文档
有人能解释一下吗。谢谢
就像在任何其他情况下一样,它采用初始
Counter()
并将counters
的第一个元素添加到它,然后将下一个元素添加到该结果中,依此类推。这与在所有Counter
实例之间显式使用+
符号相同。要了解那个做了什么,see the documentation嗯,是的,就像上面说的
len
需要知道如何获得的长度。我不明白你想要这个sum
呼叫do做什么collections.Counter
不是一个函数;这是一个类。然而,len(x)
也不是一个函数;这是调用该函数的结果。(类似地,调用的collections.Counter
类的结果是一个collections.Counter
实例),不管start
参数来自哪里;重要的是它的值。例如:a
中有7项,因此len(a)
等于7
,结果与直接写入sum(a, 7)
相同。也就是说7 + 2 + 3 + 3 + 4 + 5 + 5 + 6
=35
Counter()
提供了一个空的Counter
实例len
不能在没有参数的情况下调用sum(counters, Counter())
大致相当于您可以这样做,因为加法是为
Counter
的实例定义的对于您正在尝试的示例,您希望以空列表的长度作为起始值:
因为
len([]) == 0
,它与sum(a, 0)
相同,或者只是sum(a)
相关问题 更多 >
编程相关推荐