我知道range
和xrange
之间的区别
但我很惊讶xrange
不是generator
而是sequence object
。
有什么区别,如何创建sequence object
以及何时使用generator
?
答案 0 :(得分:13)
xrange
是序列对象的原因是因为它支持sequence methods interface。例如,您可以将其编入索引(这是您可以使用香草生成器执行的操作):
print xrange(30)[5] # No Error
换句话说,
.next
或.__next__
是最重要的) 1 。 __iter__
方法返回" generator" (具有明确定义的.next
或.__next__
3 方法的内容)__iter__
,它返回对象本身并具有定义良好的next
和/或__next__
方法。 1 生成器也支持__iter__
并简单地返回自己。所以,所有生成器都是迭代器(和迭代器!),但并非所有迭代器(迭代器)都是生成器。
2 __len__
+ __getitem__
足以创建一个可在评论中指出的迭代。
3 __next__
是python3.x的方法名称
答案 1 :(得分:3)
sequence object
是一种特殊的C提供类型。用户代码可以写generator
。
这是Python 2的东西 - 在Python 3中:
>>> print(type(range(1)))
<class 'range'>
>>> print(type(xrange(1)))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'xrange' is not defined
Python2:
Python 2.7.5+ (default, Feb 27 2014, 19:37:08)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print type(xrange(1))
<type 'xrange'>