1

我应该如何分解这条线以使其遵守 PEP8?

    assert (sum(map(lambda x: len(x), 
                    (activities,apps,classes,users,verbs))) ==
            Object.query
                  .filter(Object.status != ObjectStatusChoices.DELETED)
                  .count())
4

2 回答 2

6

如果您将内容重写为单独的行,则永远不会出现这种情况。

它还可以让你给中间值起有意义的名字(我不得不猜测,但大概你知道它们),甚至可以将一些逻辑重构为函数(你也可以给它起有意义的名字)。

例如,不改变任何逻辑,甚至重写任何逻辑(除了len代替使用lambda x: len(x)):

lengths = map(len, (activities,apps,classes,users,verbs))
db_query = Object.query.filter(Object.status != ObjectStatusChoices.DELETED)
assert sum(lengths) == db_query.count()
于 2013-03-29T20:59:35.897 回答
1

首先,请记住,对此没有单一的“正确的 PEP8 答案”。我更喜欢:

in_mem = sum(len(x) for x in (activities,apps,classes,users,verbs))
in_db = Object.query.filter(
                        Object.status != ObjectStatusChoices.DELETED
                        ).count()
assert in_mem == in_db

当然,如果您发现自己的语句需要分成五行,那么您可能需要更多语句。

于 2013-03-29T20:56:10.020 回答