Get an iterator from an object. In the first form, the argument must
supply its own iterator, or be a sequence.
In the second form, the callable is called until it returns the sentinel.
>>> l = [1,2,3,4,5,6]
>>> l(3)
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
l(3)
TypeError: 'list' object is not callable
它与第二个值pass(一个所谓的sentinel值)有关,这确保被迭代的对象是一个可调用的,即函数。 因此,对于
iter()
执行的每一次迭代,它都会对传递的对象调用__next__()
。在iter()
有两种不同的行为文档中的示例对于理解它非常有用
来自
iter
帮助:您正在混合
iter
函数的两个变体。第一个接受集合,第二个接受两个参数-函数和sentinel值。您试图传递collection和sentinel值,这是错误的。在简短说明:您可以从python内置的
help
函数中获得许多有趣的信息。只需输入python的控制台help(iter)
,就可以得到关于它的文档。在因为
list
是返回新列表对象的函数。函数是可调用的(这是函数所做的-它被调用),而这个函数返回的实例-new list object-不是。在当用两个参数调用时,
iter
接受一个可调用值和一个sentinel值。它的行为就好像是这样实现的:作为
^{pr2}$f
传入的内容必须是可调用的,这意味着您可以像函数一样调用它。list
内置是一个type
对象,通过像函数一样调用它,您可以使用它来创建新的列表实例:您传入的列表
l
是一个现有的列表实例,不能像函数一样使用:因此,
list
类型的对象和列表实例之间有一个很大而重要的区别,这在与iter
一起使用时会显现出来。在要遍历列表直到到达sentinel,可以使用
itertools.takewhile
:相关问题 更多 >
编程相关推荐