用于循环实现的Python

2024-05-09 20:22:51 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能告诉我Python的for循环是如何实现的吗?我问这个问题的原因是,当我期望相同的行为时,我在下面两个for循环中得到了不同的行为(假设cases只是一组元素):

第一个for循环:

for case in cases:
    blah

第二个for循环:

^{pr2}$

我在多线程环境中运行代码。在

基本上,我想知道Python的for循环迭代一个集合(如第一个for循环中)是否只是第二个集合的快速方法。当我们使用python for循环时,到底会发生什么?是否有任何底层优化/实现可能导致我观察到的行为差异?在


Tags: 方法代码in元素for原因差异blah
2条回答

不,第二种格式完全不同。在

for循环对to循环覆盖序列调用iter(),并对结果使用next()调用。它相当于:

iterable = iter(cases):
while True:
    try:
        case = next(iterable)
    except StopIteration:
        break

    # blah

对列表调用iter()的结果是一个列表迭代器对象:

^{pr2}$

此对象保留对原始列表的引用并跟踪其所在的索引。该索引从0开始递增,直到列表被完全迭代为止。在

不同的对象可以返回具有不同行为的不同迭代器。如果混入了线程,最终可能会用其他东西替换cases,但迭代器仍然会引用旧序列。在

我没有发现任何不同,看看下面这个,这是你想要的吗。。在

>>> cases = [1,2,3]
>>> for case in cases:
...     print case
...
1
2
3
>>> i=0
>>> for i in range(len(cases)):
...     print cases[i]
...
1
2
3
>>>

相关问题 更多 >