web-dev-qa-db-fra.com

Style pythonique pour la compréhension de listes multilignes

Duplicata possible:
Suite de ligne pour les listes de compréhension ou les expressions de générateur en python

Quelle est la façon la plus Pythonique d'écrire une compréhension de longue liste? Cette compréhension de la liste se compose de 145 colonnes:

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

À quoi devrait-il ressembler si je le divise en plusieurs lignes? Je n'ai rien trouvé à ce sujet dans les guides de style Python.

34
cieplak

PEP 8 est un peu antérieur aux compréhensions de liste. Je les décompose généralement sur plusieurs lignes à des emplacements logiques:

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

Mais surtout, je renoncerais au test en question en premier lieu:

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)]
43
Martijn Pieters