多线列表理解的Pythonic风格

cie*_*lak 32 python coding-style list-comprehension

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

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

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

如果我把它分成多行,应该怎么看?我在Python样式指南中找不到任何相关内容.

Mar*_*ers 41

PEP 8有点早于列表理解.我通常会在逻辑位置将这些行分解为多行:

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

但大多数情况下,我首先放弃了相关的测试:

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)]
Run Code Online (Sandbox Code Playgroud)

  • +1:我打算建议将冗长的测试转移到一个函数中 (6认同)
  • 真的,在这里你想使用一个过滤器.`memberdef_list = filter(stdstring_args,from_cache(classname,'memberdefs')` (5认同)
  • @aterrel:这真的是一种风格选择;`filter(stdstring_args, from_cache(classname, 'memberdefs'))` 确实也很好。 (2认同)