【问题标题】:Pythonic Style for Multiline List Comprehension [duplicate]用于多行列表理解的 Pythonic 样式
【发布时间】:2012-09-11 14:36:26
【问题描述】:

可能重复:
Line continuation for list comprehensions or generator expressions in python

编写长列表推导式的最 Pythonic 方式是什么?这个列表理解共有 145 列:

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

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

【问题讨论】:

    标签: python coding-style list-comprehension


    【解决方案1】:

    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)]
    

    【讨论】:

    • +1:我正要建议将冗长的测试移到一个函数中
    • 真的,在这里您要使用过滤器。 memberdef_list = filter(stdstring_args, from_cache(classname, 'memberdefs')
    • @aterrel:这确实是一种风格选择; filter(stdstring_args, from_cache(classname, 'memberdefs')) 确实也不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2022-12-22
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多