如果您想参加可能很多的第一场比赛,那就next(...)
太好了。但是,如果您期望得到一个,请考虑防御性地编写:
[actor] = [actor for actor in self.actors if actor.name==actorName]
这始终扫描到最后,但不同[0]
的解构赋值成[actor]
如果存在0个或多个匹配项引发ValueError。也许比发现错误更重要,这会将您的假设传达给读者。
如果您想要默认的0个匹配项,但仍捕获> 1个匹配项:
[actor] = [actor for actor in self.actors if actor.name==actorName] or [default]
PS,也可以在右侧使用生成器表达式:
[actor] = (actor for actor in self.actors if actor.name==actorName)
这可能会更有效(?)。您也可以在左侧使用元组语法-看起来更对称,但逗号很难看,而且容易错过恕我直言:
(actor,) = (actor for actor in self.actors if actor.name==actorName)
actor, = (actor for actor in self.actors if actor.name==actorName)
(无论如何,列表和元组语法在左侧纯粹是装饰性的,不影响行为)
next(<generator_exp>)
还算不错,但是如果您尝试使其在80个字符的行中工作,则可能会变得很难看。如果您要按名称查找一群演员,那么制作一个更好的主意会更好,dict
因此您可以直接查找它们。