python中什么叫可迭代对象,python迭代器的用法

  python中什么叫可迭代对象,python迭代器的用法

  考虑因素:

  lst=ITER ([ 1,2,3 ])

  下一个(第一个)

  一个

  下一个(第一个)

  2

  因此,推迭代器通过改变预期的相同对象来响应。

  在这种情况下,我希望:

  a=ITER(列表)范围(10))

  因为我在一个:

  我是印刷品(一)

  是下一个(a)

  跳过每个元素。在调用next时,必须将迭代器向前移动一次,然后再次隐式调用循环。然后,将第二次调用的结果赋给I。

  否。不跳过地循环列表中的所有项目。

  我的第一个想法是这可能会发生。因为迭代器是循环调用的,iter内容是传递的,所以这可能会提供独立的迭代器。不是这样的。因为有ITER(一个是一个)

  那么,为什么next在这种情况下似乎不推迭代器呢?

  你能看到的是解释器除了每次迭代打印I外,都回显next()的返回值。

  a=ITER(列表)范围(10))

  因为我在一个:打印(一))。下一步(a).

  0

  一个

  2

  三

  四

  五

  六

  七

  八

  九

  所以,0是print(I)的输出,1是next)的返回值,比如交互解释器的回显。只有5次迭代,每次迭代写两行到终端。

  接下来)),其行为与预期一致。

  a=ITER(列表)范围(10))

  因为我在一个:打印(一))。_=下一个(a).

  0

  2

  四

  六

  八

  或print))打印其他信息,以将输出与交互式解释器的回声区分开来。

  a=ITER(列表)范围(10))

  因为我在一个:print ( printing : { } 。格式(一)))))))))))).接下来(a))。

  打印:0

  一个

  打印:2

  三

  打印:4

  五

  打印:6

  七

  打印:8

  九

  换句话说,next))像预期的那样工作,但是下面的值是从迭代器返回的,并由交互式解释器回显,从而使您相信循环以某种方式拥有迭代器的副本:

  我从翻译那里不知道这种行为。很庆幸自己在解决一些现实问题之前就意识到了这一点,损失了很多时间。

  .已经死了。最糟糕的是,我记得大概有人在一周前提到过这种解释行为。

  很有意思。我会试着做一个。以下(a):我想跳到1进行打印,打印1,3,5,7,9。尽管如此,还是0,2,4,6,8。为什么?

  我已经被指派了。Next(a)表示下一次迭代2赋值给I,然后再移动A,打印I,以此类推。

  n为奇数时不起作用。从列表中排除后调用next(a)将导致StopIteration异常。

  这是一个很好的解释。

  接下来发生的事情(a)返回a的下一个值,它不受影响,所以打印在控制台上。

  您可以使用该值来影响变量。

  a=ITER(列表)范围(10))

  因为我在一个:打印(一))。b=下一个(a))。

  0

  2

  四

  六

  八

  我觉得现有的答案有点混乱,因为它间接显示了代码示例中不可或缺的奥秘。“打印I”和“下一步(a)”将产生打印结果。

  他们打印原始序列的替代元素,并意外地打印了 next(a)语句,因此 print i 语句看起来像是打印了所有的值。

  在这种情况下,如果将 next(a)的结果赋给变量,可以看出 result 的打印将被禁止,只打印 I 循环变量的替代值。同样,让“打印”语句更有特色也可以消除歧义。

  (现有答案中的一个与其他答案相矛盾,因为它将样本代码评估为一个块,以避免解释器报告中间值“next(a)”。)

  一般来说,答题的吸引力在于知道答案后,显而易见的问题就会变得清晰。这可能会令人困惑。理解答案后,用同样的方法批评答案。这真的很有意思。

  对于那些还不能理解的人。

  a=ITER(列表)范围(10))

  因为我在一个:打印(一))。接下来(a))。

  0#print(I)打印了这个

  1 #下一页(一)打印本

  2#print(我)打印了这个

  3 #下一步(一)打印这个

  4#print(我)打印了这个

  5 #下一页(一)打印本

  6 #打印(我)打印了这个

  7 #下一页(一)打印本

  8 #打印(我)打印了这个

  9 #下一页(一)打印本

  正如其他人已经说过的,next按照预期添加了1个迭代器。将返回值赋给变量并不会奇怪地改变行为。

  你的Python/电脑有问题。

  a=ITER(列表)范围(10))

  因为我在一个:

  我是印刷品(一)

  是下一个(a)

  0

  2

  四

  六

  八

  按预期工作。

  我们在Python 2.7和Python 3上进行了测试。两者都适用。

  我得到了和@lvc一样的结果(只是空闲,但是我是作为脚本运行时得到的这个结果))

  @ inbarose仅在作为脚本运行时使用。

  这是通过交互式外壳放置代码的行为。如果函数在返回值后仍然没有被使用,解释器会将它作为调试输出打印到shell。

  当作为函数调用时,它的行为如下。

  定义测试() :a=ITER(列表)范围(10))。因为我在一个:打印(一))。下一步(a).

  测试() )

  0

  2

  四

  六

  八

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: