这是一个生成器表达式吗?

时间:2016-11-29 20:05:46

标签: python generator generator-expression

几天前我问了一个关于列表理解的问题:Elegant way to delete items in a list which do not has substrings that appear in another list

无论如何,我对我的问题得到了很好的回答。这是一个列表理解:

[p for p in process_list if all(e not in p for e in exclude_list)]

我明白并将其应用到我的工作中。但我不确定我是否正确e not in p for e in exclude_list部分。它对我来说看起来像一个发电机表达,但我不确定。我认为最好在另一篇文章中提出这个问题。

那么它是生成器表达式还是别的什么?

2 个答案:

答案 0 :(得分:3)

让python告诉你它是什么:

>>> p=[]
>>> exclude_list=[]
>>> type(e not in p for e in exclude_list)
<class 'generator'>

答案 1 :(得分:2)

是的,all(e not in p for e in exclude_list)是一个包含生成器表达式的调用。传递给调用的 only 参数的Generator表达式可以省略括号。在这里,这是被调用的all() function

来自Generator expressions reference documentation

  

只有一个参数的调用可以省略括号。

all()函数(以及伴随函数any()通常被赋予生成器表达式,因为这允许对一系列测试进行惰性求值。只有足够的e not in p次测试执行以确定结果;如果任何 e not in p测试为false,all()会提前返回,并且不会执行进一步的测试。