首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在for循环的主体中使用迭代器安全吗?

在for循环的主体中使用迭代器安全吗?
EN

Stack Overflow用户
提问于 2016-10-08 19:00:51
回答 1查看 72关注 0票数 3

在Python中这样做安全吗(例如,在解析器中)?

代码语言:javascript
运行
复制
iterator = iter(some_iterable)
for x in iterator:
    # do stuff with x
    if some_condition(x):
        y = next(iterator)
        # do stuff with y

我在Python 2和3中进行了测试,它做了我期望的事情,但我不知道它是否真的安全,是否是惯用的。上述代码应相当于以下更详细的备选方案:

代码语言:javascript
运行
复制
iterator = iter(some_iterable)
while True:
    try:
        x = next(iterator)
    except StopIteration:
        break
    # do stuff with x
    if some_condition(x):
        y = next(iterator)
        # do stuff with y
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-08 19:11:21

基本上,跟踪异常并正确处理它们总是更好。但是,关于whilefor循环之间的区别--在本例中,当您在while循环中调用next()函数时,总是可以引发StopIteration异常,但是当您使用基于next()调用数和迭代次数的for循环时,可能会有所不同。

例如,在这种情况下,对于偶数的迭代,它不会引发异常,但对于概率,则会引发异常。原因是,在偶数迭代数中,您的下一个迭代始终是for循环前面的一个项,而对于偶数则不是这样。

代码语言:javascript
运行
复制
In [1]: it = iter(range(4))

In [2]: for x in it:
   ...:     print(x)
   ...:     next(it)
   ...:     
0
2

In [3]: it = iter(range(3))

In [4]: for x in it:
            print(x)
            next(it)
   ...:     
0
2
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-4-1b3db7079e29> in <module>()
      1 for x in it:
      2             print(x)
----> 3             next(it)
      4 

StopIteration: 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39936220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档