【发布时间】:2019-02-15 20:31:10
【问题描述】:
这是我目前的单行:
leader = [server.get_member(x) for x in self.rosters[server.id][clan]['members'] if discord.utils.get(server.get_member(x).roles, id="463226598351699968")]
我只想在server.get_member(x) 不是False 时运行它。如何将此额外逻辑添加到此列表理解中?我知道如何做一个基本的 for in 语句,但是嵌套得比这更深对我来说有点混乱。
【问题讨论】:
-
请把它翻译成一个普通的
for loop以提高可读性,如果你是在可预见的未来必须维护它的人,为了你自己的利益 -
你应该努力编写干净、可维护的代码,而不是将所有内容都塞进一个列表中
-
Python 列表推导对很多事情都很有用,但如果你开始迷失在逻辑中,可能是时候将其分解为常规循环了
-
这是你的 API 还是其他人的 - 你能改进分解吗?如果没有任何成员,让
server.get_member(x)返回None可能会更好。如果self.rosters[server.id][clan]['members']是你自己的代码,那么最好把它分解成更OO的东西。 -
需要 for-loop/if-statements 而不是列表理解的一个强烈的代码味道是,您正在解决一个明确需要存储状态正如@blue_note 所说,通过两次调用
server.get_member(x)。