【发布时间】:2015-07-19 21:57:14
【问题描述】:
我有两个循环来查找列表中项目的乘积。如下图:
循环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 循环中所做的那样?
【问题讨论】:
-
iter([1,2,4,8])在 while 不是 for 循环中您实际上在问什么,iter 如何工作或 for 循环如何工作? -
...什么?您可以查看内部工作原理,Python 是开源的,但是哪个发行版?
-
我的意思是,在 while 循环中,python 无法辨别 [1,2,4,8] 是一个列表,因此就像在 for 循环中所做的那样是一个可言词。
-
重要的是,您在循环 A 中所做的基本上是您在循环 B 中所做的语法糖。使用 for 循环对迭代进行迭代将创建迭代的迭代器,然后创建 @987654325 @ 那个迭代器,直到引发
StopIteration异常,此时 for 循环停止迭代。
标签: python loops for-loop while-loop iteration