2011-03-22 30 views
6

我知道這是錯誤的事情,但我使用python 3,但用python 2書來研究它。Python 3.2空閒:範圍函數 - 打印或列表?

它說,

>>>range(2,7) 

將顯示

[2,3,4,5,6] 

,但我知道它不會顯示上面的輸出,我想通。所以我嘗試:

>>>>print(range(2,7)) 

和TA-DA-它顯示如下:

range(2,7) 

看起來這是從P2到P3的變化的一個,所以我嘗試:

list(range(2,7)) 

這個在IDLE上可以正常工作,但在長時間編碼的記事本上卻不行。所以最後我嘗試了:

print(list(range(2,7))) 

它顯示了一些類似於我的意圖......我做對了嗎?這是寫它的唯一方法嗎?

+0

此問題也適用於zip。你需要'list(zip(stuff))' – 2016-09-22 01:22:43

回答

6

在您的IDLE情況下,您正在IDLE的PyShell窗口中運行代碼。這是運行交互式解釋器。在交互模式下,Python會立即解釋您輸入的每一行,並顯示通過評估您輸入的語句以及寫入標準輸出或標準錯誤的任何內容返回的值。對於Python 2,range()返回一個列表,如您發現的那樣,它將在Python 3中返回一個可迭代的range()對象,您可以使用該對象創建列表對象或在迭代上下文中的其他地方使用。 Python 3 range()與Python 2的xrange()類似。

當您在記事本等編輯器中編輯文件時,您正在編寫腳本文件,並且在Python解釋器中運行該文件時,整個腳本被解釋並作爲一個單元運行,即使它只有一行長。在屏幕上,您只能看到寫入標準輸出的內容(即「print()」)或標準錯誤(即錯誤追溯);您在交互模式下看不到每條語句的評估結果。因此,在你的例子中,當從一個腳本文件運行時,如果你不打印評估結果,你就不會看到它。

Python教程講述了一下這個here

4

如果你唯一的目標是回到列表表示,你在做什麼是正確的。 Python 3.0現在將range視爲返回迭代器(xrange用來做什麼)