【发布时间】:2016-05-04 04:55:31
【问题描述】:
内含yield 的列表推导和生成器推导有什么区别?两者都返回一个生成器对象(分别为listcomp 和genexpr),但在全面评估后,后者添加了似乎相当多余的Nones。
>>> list([(yield from a) for a in zip("abcde", itertools.cycle("12"))])
['a', '1', 'b', '2', 'c', '1', 'd', '2', 'e', '1']
>>> list(((yield from a) for a in zip("abcde", itertools.cycle("12"))))
['a', '1', None, 'b', '2', None, 'c', '1', None, 'd', '2', None, 'e', '1', None]
怎么会?科学解释是什么?
【问题讨论】:
-
@Alik,@Antti Haapala,请删除“重复”标记。这个问题询问使用
yield fromPython 语句的行为。链接的“重复”答案询问了关于yieldPython 语句的类似问题。这两种说法是不同的。而且由于yield from是最近才添加到该语言中的,因此很自然地会产生新的意外行为。这应该会导致一些问题,虽然它们可能看起来类似于关于yield的问题,但与关于yield的问题不同。 -
您还在寻找问题的答案吗?
-
第一种情况实际上是丢弃列表推导的结果。结果是由
yield from a引起的理解的副作用。
标签: python python-3.x list-comprehension