42

可能重复:
python 中列表推导或生成器表达式的行延续

编写长列表理解最pythonic的方法是什么?这个列表理解共有 145 列:

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

如果我把它分成多行,它应该是什么样子?我在 Python 风格指南中找不到任何关于此的内容。

4

1 回答 1

56

PEP 8 有点早于列表理解。我通常在逻辑位置将它们分成多行:

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)]
于 2012-09-11T14:39:59.237 回答