回答
要使類可迭代,請編寫一個返回迭代器的方法__iter__()
。例如
class MyList(object):
def __init__(self):
self.list = [42, 3.1415, "Hello World!"]
def __iter__(self):
return iter(self.list)
m = MyList()
for x in m:
print x
打印
42
3.1415
Hello World!
的例子使用的列表迭代器,但你也可以通過任一使__iter__()
一個generator或通過返回定義next()
一個迭代器類的實例編寫自己的迭代器方法。
這question可以幫助你,它描述瞭如何使一個迭代符
的Python documentation精確地描述了這一點:
一種方法需要對容器對象被定義爲提供迭代支持:
container.__iter__()
Return it iter ator對象。該對象需要支持下面描述的迭代器協議。如果一個容器支持不同類型的迭代,可以提供額外的方法來專門爲這些迭代類型請求迭代器。 (支持多種迭代形式的對象的一個例子是支持廣度優先和深度優先遍歷的樹結構。)此方法對應於Python/C API中Python對象的類型結構的tp_iter槽。
迭代器對象本身都必須支持下面的兩種方法,它們一起形成所述迭代器協議:
iterator.__iter__()
返回迭代器對象本身。這是允許容器和迭代器與for和in語句一起使用所必需的。此方法對應於Python/C API中Python對象的類型結構的tp_iter插槽。
iterator.next()
返回從容器中的一個項目。如果沒有其他項目,請引發StopIteration異常。此方法對應於Python/C API中Python對象類型結構的tp_iternext插槽。
你會想next()
和__iter__()
方法。 Here's a nice little tutorial。
該教程僅適用於Python 2.對於記錄,發佈此答案時存在Python 3。這裏是Python 3的[一](http://nvie.com/posts/iterators-vs-generators/)。 – 2017-04-18 17:28:36
帶有__iter__()
方法的任何對象都被認爲是可迭代的。
此外,任何序列(具有__getitem__()
方法的對象)都可以返回迭代器。迭代器是一個帶有__next__()
方法的對象,該方法返回序列中的下一個對象並引發StopIteration異常。
- 1. 據稱「可迭代」的東西不是
- 2. HTML代碼 - 某些東西是無效的 - 無法理解什麼
- 3. Java迭代器的東西
- 4. jQuery如果元素包含某些東西,做些什麼
- 5. 當某人說「Python中的所有東西都是一個對象」時,「東西」是什麼意思?
- 6. 什麼是適合REST的方式來「喜歡」Rails 3中的某些東西?
- 7. 當使用JavaScript時,某些東西是「未定義」時,這意味着什麼?
- 8. 在CUP中:如何使某些東西可選來解析?
- 9. 匹配是什麼東西?
- 10. 這是什麼東西叫?
- 11. 在某個組件中存儲某些東西是否安全?
- 12. 用迭代的東西代替函數
- 13. 從列表中刪除某些東西
- 14. 在HTML C中搜索某些東西#
- 15. C++爲什麼要將某些東西轉換成NaN?
- 16. 什麼是取代(/ \ n /克, 「東西」)是什麼意思?
- 17. 什麼是WPF中的x:東西?
- 18. JavaScript中的這個東西是什麼?
- 19. 是否可以在浮點圖頂部放置某些東西?
- 20. 是否可以在iframe之前放置某些東西?
- 21. 什麼是C:\ WINDOWS \ ASSEMBLY \目錄中的那些東西?
- 22. 什麼是!!和Ruby中的其他一些東西?
- 23. 即使輸入了某些東西,TextBox.text的值也是空的
- 24. 如何使某些東西不受time.sleep()python
- 25. 爲什麼在我運行代碼時會安裝某些東西?
- 26. 爲什麼這個迭代沒有返回任何東西?
- 27. Python映像庫在PyPI上不可用,還是我錯過了某些東西?
- 28. 如何從POST中獲得某些東西
- 29. 你如何/爲什麼可以在另一個班級處理某些東西?
- 30. 你如何在Python中調用某些東西?
還有'__getitem__'的另一種方法,請參閱http://stackoverflow.com/a/9884259/284795 – 2015-07-12 13:10:45
@ColonelPanic是正確的,如果您定義'__getitem__',該類也是可迭代的。但是它會忽略你也定義了'__len__'並且只是無限地迭代。 – jlh 2017-10-24 20:52:20