循环的工作

时间:2015-07-19 21:57:14

标签: python loops for-loop while-loop iteration

我有两个循环来查找列表中项目的产品。见下文:

循环A

product = 1
for i in [1, 2, 4, 8]:
   product *= i
print(product) # result= 64

循环B

product = 1
i = iter([1, 2, 4, 8])
while True:
     try:
        product *= next(i)
     except StopIteration:
        break
print(product) # prints: 64

我的问题是在for循环中发生了什么,它显式调用了迭代器,即:iter([1,2,4,8])是否必要?

不能让python发现[1,2,4,8]是列表因此是一个可迭代的,就像在for循环中一样吗?

2 个答案:

答案 0 :(得分:1)

您在[ undefined, undefined ] 循环中使用了iter(),它返回了当前对象的 iterator object ,因此您可以使用所有next()函数从iterator获取下一个项目。这可以帮助您在不使用while循环的情况下访问可迭代对象的项目,因为迭代器是一次性迭代,您无法迭代{{1}再次。

答案 1 :(得分:0)

python中的for语句定义为迭代循环。 while语句是非迭代的,因此必须为它创建迭代器。来自documentation

for

  

Python的for语句按照它们在序列中出现的顺序迭代任何序列(列表或字符串)的项目。

while

  

只要条件(此处:True)保持为真,就会执行while循环。

循环A和循环B代表了通过不同方法完成同一事物的两种不同方式。

循环A 使用for语句迭代给定列表[1,2,4,8]

循环B 使用while语句,根据定义,该语句是非迭代的,并持续到给定错误条件或break

为了结束while循环,循环B 使用i = iter()在列表中建立一个迭代器。当next(i)到达迭代器i的末尾时,它会触发异常,该异常使用break退出while循环。

很多人认为

循环A 是以这种方式计算产品的更加pythonic和更安全的方式。