Pythonic Style для понимания многострочного списка

Возможный дубликат:
Продолжение строки для понимания списков или выражений генератора в python

Каков самый питонический способ написать понимание длинного списка? Это понимание списка выходит на 145 столбцов:

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

Как это должно выглядеть, если я разобью его на несколько строк? Я не мог найти ничего об этом в руководствах по стилю Python.


person cieplak    schedule 11.09.2012    source источник


Ответы (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)]
person Martijn Pieters    schedule 11.09.2012
comment
+1: я собирался предложить перенести длинный тест в функцию - person LexyStardust; 11.09.2012
comment
Действительно, здесь вы хотите использовать фильтр. memberdef_list = filter(stdstring_args, from_cache(classname, 'memberdefs') - person aterrel; 11.09.2012
comment
@aterrel: на самом деле это выбор стиля; filter(stdstring_args, from_cache(classname, 'memberdefs')) тоже в порядке. - person Martijn Pieters; 11.09.2012