簡體   English   中英

Python:Interpreter返回對象/函數而不是評估

[英]Python: Interpreter returns Objects/Functions instead of evaluating

我使用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()

這里有什么不對?

沒有錯誤。 range()是Py3.x一次生成項目1,就像生成器不同,它在Py2.x中的行為就是生成一個列表然后然后返回給你。 在對list()的調用中將你的調用包裹到range(10)中,你就會得到你所期望的。

這些函數返回迭代器對象。 您可以使用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)

返回迭代器而不是列表允許對項執行復雜操作,而無需將所有這些操作加載到內存中。 例如,您可以迭代一個巨大的文件並逐個字符地轉換它,而無需將整個文件加載到內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM