如何在Python中断行链式调用的方法?

185 投票
9 回答
53260 浏览
提问于 2025-04-16 10:26

我有一行这样的代码(别怪我命名不规范,这不是我写的):

subkeyword = Session.query(
    Subkeyword.subkeyword_id, Subkeyword.subkeyword_word
).filter_by(
    subkeyword_company_id=self.e_company_id
).filter_by(
    subkeyword_word=subkeyword_word
).filter_by(
    subkeyword_active=True
).one()

我觉得它看起来不太好(不太容易读),但在这种情况下,我没有更好的办法来限制每行字符到79个。有没有更好的方法来换行(最好不要用反斜杠)?

9 个回答

21

我个人的选择是:

subkeyword = Session.query(
    Subkeyword.subkeyword_id,
    Subkeyword.subkeyword_word,
).filter_by(
    subkeyword_company_id=self.e_company_id,
    subkeyword_word=subkeyword_word,
    subkeyword_active=True,
).one()
72

在这种情况下,使用换行符比使用开放括号更好。当方法名称变得很长,或者方法开始接受参数时,这种风格的必要性就更加明显了:

subkeyword = Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word) \
                    .filter_by(subkeyword_company_id=self.e_company_id)          \
                    .filter_by(subkeyword_word=subkeyword_word)                  \
                    .filter_by(subkeyword_active=True)                           \
                    .one()

PEP 8 是一套代码风格指南,目的是让代码既实用又美观。你可以大胆地违反任何让代码看起来丑陋或难以阅读的 PEP 8 规则。

不过,如果你经常觉得自己和 PEP 8 发生冲突,那可能说明你的代码在可读性上有问题,而不仅仅是空格的选择 :-)

324

你可以使用额外的括号:

subkeyword = (
        Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word)
        .filter_by(subkeyword_company_id=self.e_company_id)
        .filter_by(subkeyword_word=subkeyword_word)
        .filter_by(subkeyword_active=True)
        .one()
    )

撰写回答