在运算符vs或运算符中使用它是否更加pythonic

时间:2013-06-09 04:25:23

标签: python

这些陈述中哪一个更具有pythonic?如果我添加了更多的比较,那么一个会比另一个更有用吗?

if(card3 == game_data['card1'] or card3 == game_data['card2'])

或者

if (card3 in [game_data['card1'],  game_data['card2']])

2 个答案:

答案 0 :(得分:5)

只进行两次比较,其中一次是好的。但第二种方式更像是Pythonic,因为它更自然地扩展到更多的比较。另外,正如Perkins所提到的,如果game_data是一个词典并且“card1”和“card2”是唯一的键,那么你可以使用if card3 in game_data.values()

创建列表的开销对于您可以手动输入的任何数量的情况都可以忽略不计。如果手动输入的数量太多,您可以将它们存储在某种容器中,并且可以在该容器上使用in

坚持使用or进行大量比较的唯一原因是,如果您要比较的对象是异常对象,其等同性测试的计算成本很高,并且您需要依赖于短路or以特别动机的顺序测试它们的行为。不过,这将是一种不寻常的情况。

答案 1 :(得分:-1)

或者。它也会更快。另一种方式是创建一个列表,然后将其丢弃,这是浪费而且不太清楚。如果只有两个键,则可以if card3 in game_data.values(),但使用or