用于多行列表理解的Pythonic样式

用于多行列表理解的Pythonic样式,python,coding-style,list-comprehension,Python,Coding Style,List Comprehension,可能重复: 写一份长长的理解清单,哪一种方式最有说服力?该列表共有145列: memberdef_list = [elem for elem in from_cache(classname, 'memberdefs') if elem.argsstring != '[]' and 'std::string' in null2string(elem.vartype)] 如果我把它分成多行,它会是什么样子?我在Python风格指南中找不到关于这方面的任何信息。PEP8有点早于列表理解。我通常在多

可能重复:

写一份长长的理解清单,哪一种方式最有说服力?该列表共有145列:

memberdef_list = [elem for elem in from_cache(classname, 'memberdefs') if elem.argsstring != '[]' and 'std::string' in null2string(elem.vartype)]

如果我把它分成多行,它会是什么样子?我在Python风格指南中找不到关于这方面的任何信息。

PEP8有点早于列表理解。我通常在多行逻辑位置将其分解:

memberdef_list = [elem for elem in from_cache(classname, 'memberdefs')
                  if elem.argsstring != '[]' and 
                     'std::string' in null2string(elem.vartype)]
不过,最重要的是,我首先放弃了那里的测试:

def stdstring_args(elem):
    if elem.argstring == '[]':
        return False
    return 'std::string' in null2string(elem.vartype)

memberdef_list = [elem for elem in from_cache(classname, 'memberdefs')
                  if stdstring_args(elem)]

+1:我正要建议将冗长的测试移到函数中。真的,这里你想使用一个过滤器
memberdef_list=filter(stdstring_args,from_cache(classname,'memberdefs'))
@aterrel:这确实是一个样式选择;
filter(stdstring_args,from_cache(classname,'memberdefs'))
确实也不错。