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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。