尝试使用生成器表达式来理解Python代码

时间:2012-07-26 17:15:19

标签: python generator

在以下代码中:

chars = set('AEIOU')
...
if any((cc in chars) for cc in name[ii]):
    print 'Found'

什么是“(字符中的cc)”部分?我知道它适用于for循环生成的每个cc。但是“(cc in chars)”构建自己是一个生成器表达式吗?

感谢。

3 个答案:

答案 0 :(得分:3)

不,(cc in chars)部分是布尔表达式; in is a sequence operator,用于测试cc是否为序列chars的成员。括号实际上是多余的,可以省略。

答案 1 :(得分:3)

(cc in chars)只检查字符cc是否包含在chars中,并返回布尔值falsetrue

根据Python Language Reference,括号之间的内容不是生成器表达式,除非它至少有一个for i in iterable子句。

答案 2 :(得分:1)

不,(cc in chars)只是一个布尔值,如果cc在字符中则返回True,否则返回False。

实际上,代码实际上可以写成

chars = set('AEIOU')
...
if [cc for cc in name[ii] if cc in chars]:
    print 'Found'

在这种情况下,如果列表中有任何元素(使其通过if子句),那是因为某些cc是chars。我实际上发现它更具可读性和直接性。 欢呼声。

修改

为了澄清我的回答,[cc for cc in name[ii] if cc in chars]生成名称[ii]中所有字符的列表,即“字符”(在这种情况下为元音)。如果此列表中包含任何元素,它将通过if-test。

[cc for cc in name[ii] if cc in chars]说“对于名称[ii]中的每个元素/字符,只有在字符中添加它。请查看this答案以获得澄清。