Sof*_*avo 8 python iterator generator
我想迭代一个可迭代的对象(比方说,一个列表),并在某个时刻记住我离开的位置,以便在下次调用该对象的迭代器时继续.
就像是:
for val in list:
do_stuff(val)
if some_condition:
break
do_stuff()
for val in list:
continue_doing_stuff(val)
Run Code Online (Sandbox Code Playgroud)
速度很重要,所考虑的清单非常大.因此,保存对象并在整个列表中再次迭代,直到找到保存的元素不是一个选项.如果没有为列表编写显式迭代器类,这可能吗?
__iter__当您使用对象进入for循环并返回迭代器时,将调用该方法。我们通常不保留指向迭代器的名称,但是如果这样做,我们可以停止迭代,执行其他操作,然后继续进行迭代。
获取迭代器对象的最佳方法是使用内置iter函数:
a_list = ['a', 'b', 'c', 'd']
iter_list = iter(a_list)
for val in iter_list:
print(val) # do_stuff(val)
if val == 'b': # some_condition!
break
print('taking a break') # do_stuff()
for val in iter_list:
print(val) # continue_doing_stuff(val)
Run Code Online (Sandbox Code Playgroud)
显示:
a
b
taking a break
c
d
Run Code Online (Sandbox Code Playgroud)
iter(obj)只是返回的结果obj.__iter__(),该结果应该是实现.__next__()方法的迭代器。
__next__每次迭代都会调用该方法,并返回对象(在这种情况下为字符)。
如果要自己调用该__next__方法而不是由for循环调用该方法,则应使用内置next函数:
a_list = ['a', 'b', 'c', 'd']
iter_list = iter(a_list)
print(next(iter_list)) # do_stuff(val)
print(next(iter_list))
print('taking a break') # do_stuff()
print(next(iter_list)) # continue_doing_stuff(val)
print(next(iter_list))
Run Code Online (Sandbox Code Playgroud)
印刷品:
a
b
taking a break
c
d
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |