【问题标题】:Python: elif or new if?Python:elif 还是 new if?
【发布时间】:2011-08-13 18:17:24
【问题描述】:

什么更好用:

if var in X:
    #do_whatever
elif (var in Y):
    #do_whatever2

或:

if var in X:
    #do_whatever
if var in Y:
    #do_whatever2

假设 var 不能同时在 X 和 Y... 有什么规则或惯例吗?我应该使用 elif 吗?还是一个新的如果?还是没关系??

编辑:很好的答案.. 但是我可以说如果第一个语句 (#do_whatever) 以返回或中断结束;最终不会测试其他条件从而浪费系统资源或造成麻烦,可以做任何事情..我猜...

【问题讨论】:

  • 你确定第二部分的意思不是else if...

标签: python if-statement


【解决方案1】:

在某些情况下会有所不同。 看这个例子:

def foo(var):
    if var == 5:
        var = 6
    elif var == 6:
        var = 8
    else:
        var = 10

    return var

def bar(var):
    if var == 5:
        var = 6
    if var == 6:
        var = 8
    if var not in (5, 6):
        var = 10

    return var

print foo(5)        # 6
print bar(5)        # 10

【讨论】:

  • bar(5) 返回 10,而不是 8
  • @AirThomas 你是对的,谢谢!过了这么久你是第一个发现的吗?不错;)
【解决方案2】:

如果第一个为真,则第二个语句是不可能的(就像这里的情况,因为你说 var 不能同时在 X 和 Y 中),那么你应该使用 elif。否则,第二次检查仍然会运行,如果你知道它会出错,那就是浪费系统资源。

【讨论】:

    【解决方案3】:

    如果您需要执行这两项检查,您应该使用两个单独的ifs。如果您想检查一个或订单,您应该始终使用elif,因为

    • 效率更高。如果您的第一个条件为真,您将节省资源。
    • 如果这两个条件都为真,您可能会遇到意外错误。

    在性能方面,您还应该考虑首先测试最可能的情况。

    【讨论】:

      【解决方案4】:

      在不了解数据的情况下查看代码,然后 elif 案例明确说明您的意图并且是首选。

      两个 if 语句的大小写也更难维护,因为即使添加了 cmets,它们仍然需要检查。

      【讨论】:

      • 是的,如果代码被扩展,添加命令会变得更难维护......
      【解决方案5】:

      如果var 不能同时在XY 中,那么您应该使用elif。这样,如果var in Xtrue,您就不需要毫无意义地评估var in Y

      【讨论】:

      • 不,但是如果Y 是一个非常大的列表,那么如果var in Xtrue,那么运行一个您知道将始终返回false 的检查会浪费资源。
      猜你喜欢
      • 2010-09-15
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2015-10-20
      相关资源
      最近更新 更多