【问题标题】:Workings of loops [closed]循环的工作[关闭]
【发布时间】: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


【解决方案1】:

您在while 循环中使用了iter(),该循环返回当前对象的iterator object,因此您可以对其上的所有next() 函数来检索下一个项目迭代器。这可以帮助您在不使用for 循环的情况下访问可迭代对象的项目,因为迭代器是一次性可迭代对象,您不能再次迭代i

【讨论】:

    【解决方案2】:

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

    for

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

    while

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

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

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

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

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

    循环 A 会被许多人认为是以这种方式计算乘积的更 Pythonic 和更安全的方法。

    【讨论】:

      猜你喜欢
      • 2019-01-21
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      相关资源
      最近更新 更多