Python:Interpreter返回对象/函数而不是评估

时间:2012-06-07 18:52:13

标签: python

我使用的是python-3.2.3 64bit,我看到了一些奇怪的行为。

例如,使用解释器时: 输入

>>> range(10)

导致输出

range(0, 10)

何时打印

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Simmilary输入

>>> l = range(10)
>>> f = filter( lambda x: x<2, l)
>>> f

导致输出

<filter object at 0x00000000033481D0>

但它应该是

[0, 1]

显然我无法对该对象做任何事情:

>>>> len(f)
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    len(f)
TypeError: object of type 'filter' has no len()

这里有什么问题?

2 个答案:

答案 0 :(得分:18)

没有错。 range()是Py3.x一次生成项目1,就像生成器不同,它在Py2.x中的行为就是生成一个列表然后然后返回给你。在致电range(10)时给list()打来电话,你会得到你期望的。

答案 1 :(得分:3)

这些函数返回迭代器对象。您可以使用list(range(0, 10))list(f)将其转换为列表。您还可以迭代结果,如:

for i in range(0, 10):
    print(i)

最后,您可以使用next函数获取下一个项目:

l = range(0, 10)
l1 = next(l)
l2 = next(l)

返回迭代器而不是列表允许对项执行复杂操作,而不必将所有这些操作加载到内存中。例如,您可以迭代一个巨大的文件并逐个字符地转换它,而无需将整个文件加载到内存中。

相关问题