我有两个循环来查找列表中项目的产品。见下文:
循环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循环中一样吗?
答案 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和更安全的方式。