web-dev-qa-db-ja.com

複数行リストを理解するためのPythonicスタイル

可能性のある複製:
リスト内包表記またはPythonのジェネレータ式の行継続

長いリスト内包表記を記述する最もPython的な方法は何ですか?このリスト内包表記は145カラムに出てきます。

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

複数行に分割するとどうなりますか? Pythonスタイルガイドでこれについて何も見つけることができませんでした。

34
cieplak

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