最有效的if语句?

时间:2017-01-29 16:15:48

标签: python python-2.7 python-3.x if-statement

我想编写一个函数,它将整数xyLR作为参数,并返回True if {{1 }}否则位于区间x**y(L, R]

我正在考虑在这个函数中编写条件语句的几种方法:

  1. False
  2. if L < x ** y <= R:
  3. if x ** y > L and x ** y <= R:
  4. 为什么选项1在执行时间方面效率最高?

2 个答案:

答案 0 :(得分:5)

#1和#3都避免重新计算x ** y,其中#2必须计算两次。

在Python 2上,#3会很糟糕,因为它必须计算range的全部内容。在Python 3.2+上,它不是必须的(range是智能的,并且可以在数学上正确地确定int是否出现在range中而不实际迭代,在恒定时间内) ,但它最多等同于#1,因为创建range对象有一些开销。

在评论中提及tobias_k,如果x ** y生成float,则#3会更慢(打破Python 3.2+ O(1)成员资格测试优化,需要对所有值进行隐式循环),如果该值不等于int中的任何range值,则会得到与#1和#2不同的结果。也就是说,测试3.5 in range(1, 5)会返回False,并且必须针对3.5123检查4它甚至可以告诉你那么多。

基本上,坚持#1,它将是唯一一个避免冗余计算并避免在Py 2和Py3上创建大量值进行比较的人。 #3在Python 3.2+上不会太多(如果有的话)慢,但它确实涉及创建一个在这里不需要的range对象,并且在逻辑上不太相同

答案 1 :(得分:1)

第一个必须仅评估x**y一次,因此它应该比第二个更快(也更可读)。第三个必须遍历迭代器(在python 2中,因此它应该比两者慢)或进行两次比较(在python 3中,所以它并不比第一个更好)。保留第一个。