W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你構(gòu)建了一個(gè)自定義容器對(duì)象,里面包含有列表、元組或其他可迭代對(duì)象。你想直接在你的這個(gè)新容器對(duì)象上執(zhí)行迭代操作。
實(shí)際上你只需要定義一個(gè) __iter__()
方法,將迭代操作代理到容器內(nèi)部的對(duì)象上去。比如:
class Node:
def __init__(self, value):
self._value = value
self._children = []
def __repr__(self):
return 'Node({!r})'.format(self._value)
def add_child(self, node):
self._children.append(node)
def __iter__(self):
return iter(self._children)
# Example
if __name__ == '__main__':
root = Node(0)
child1 = Node(1)
child2 = Node(2)
root.add_child(child1)
root.add_child(child2)
# Outputs Node(1), Node(2)
for ch in root:
print(ch)
在上面代碼中,__iter__()
方法只是簡(jiǎn)單的將迭代請(qǐng)求傳遞給內(nèi)部的 _children
屬性。
Python的迭代器協(xié)議需要 __iter__()
方法返回一個(gè)實(shí)現(xiàn)了 __next__()
方法的迭代器對(duì)象。如果你只是迭代遍歷其他容器的內(nèi)容,你無(wú)須擔(dān)心底層是怎樣實(shí)現(xiàn)的。你所要做的只是傳遞迭代請(qǐng)求既可。
這里的 iter()
函數(shù)的使用簡(jiǎn)化了代碼,iter(s)
只是簡(jiǎn)單的通過(guò)調(diào)用 s.__iter__()
方法來(lái)返回對(duì)應(yīng)的迭代器對(duì)象,就跟 len(s)
會(huì)調(diào)用 s.__len__()
原理是一樣的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: