为什么去掉打印语句就能让代码正常执行?

ID:20010 / 打印

为什么去掉打印语句就能让代码正常执行?

调试执行顺序启示录

在解决代码执行异常时,我们时常会碰到看似奇葩的问题,比如去掉某行打印语句就能让后续代码执行。本文将以一个示例来说明这种现象背后的缘由。

代码如下:

def y(list):     for i in list:         yield i  def exec(g):     print(list(g))     for i in g:         print(i)  t = (123, 'xyz', 'zara', 'abc') g = y(t) exec(g)

问题出在执行exec(g)后,为什么不能直接输出i?答案在于g是一个迭代器。

g迭代的是元组t,如果我们使用list(g),就会提前将所有元素都取出来,这相当于把迭代器一次性消耗殆尽。迭代器一旦被消耗,就不可再用。因此,当我们想要再次遍历g时,就没有元素可供遍历了。

解决办法是使用next(g)逐个取元素,而不是一次性取完所有元素。这样,迭代器不会被消耗,我们就可以在任何时候遍历g。

修改后的代码如下:

def exec(g):     for i in g:         print(next(g))

这样,无论执行顺序如何,输出都将是预期的:

123 xyz zara abc
上一篇: 贴吧图片正则表达式匹配出错:如何解决 TypeError: expected string or bytes-like object 错误?
下一篇: Python 中的 eval 函数为何会产生奇妙的结果?

作者:admin @ 24资源网   2025-01-14

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。