【问题标题】:Python: Do I have to use else statements (unless mandated by code)?Python:我是否必须使用 else 语句(除非代码要求)?
【发布时间】:2016-05-30 08:14:29
【问题描述】:

我了解ifelseelif 的说法。但是,我不确定在功能块中使用 return 的最佳实践。用返回块编写 if/else 构造的最 Pythonic 方式是什么?

# Other's code:
def my_function():
    do = input("Enter 'n' to print 1 and any other key to print 2")
    if do == "n":
        print(1)
        return
    else:
        print("2")
        return

# My code:
def my_function():
    do = input("Enter 'n' to print 1 and any other key to print 2")
    if do == "n":
        print(1)
        return
    # Note that I do not use an else statement here
    print("2")
    return

需要在最后一行添加else(或elif)语句吗?当我可以在if 语句之后键入我的代码时,我看不到一个额外的else(或elif)语句的意义。

我也很困惑,因为我最近了解到else 语句可以与循环配对。 (例如for ... else ...

【问题讨论】:

  • 这在逻辑上是两个完全不同的东西。在第一个例子中,elif select == "s": 之后的代码只有在 select 不是 'a' 而是 's' 时才会执行 在第二个例子中,if select == "s": 之后的代码即使 select 是 's' 也会被执行,不管是不是也是'a' 你是对的,在这种情况下它可能不会有什么不同。但是,您应该编写代码,使其说明函数实际尝试实现的目标。这取决于问题。
  • @user3207838 这是什么意思?
  • 这意味着在您的示例中,它可能不会有所作为。但是你要明白,从逻辑的角度来看,这两件事是不同的。
  • @user3207838 好的,我编辑了最后一部分。但是,我的意思是我是否必须 输入'elif' 或'else',除非绝对 是强制性的? (就像这个,它不是,但在某些人的代码中,我看到他们使用了 'elif' 等,即使它不是强制性的。

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


【解决方案1】:

您的代码不是 elifelse 的好例子。但我会首先分析你的例子。

  1. 第一个条件:
select = input("Enter 'a' to add, 's' to subtract, 'x' to exit: ")
if select == "a":
    # code
elif select == "s": 
    # code
elif select == "x": 
    return

您至少需要一个else。如果用户输入y,会发生什么?

您的代码:

if select == "a":
    # code
if select == "s": 
    # code
if select == "x": 
    return

将始终检查 3 个if 条件。在这种情况下,这不是效率。有时它会做一个完全不同的场景。

我将使用whileelse 编写代码,所以:

while(True)
    select = input("Enter 'a' to add, 's' to subtract, 'x' to exit: ")
    if select == "a":
        # code
        break
    elif select == "s": 
        # code
        break
    elif select == "x": 
        return
    else:
        print "Input is invalid!"
  1. 第二个条件是对的。 else 在这里可能没有必要。但最好用else 写代码(它完成相同的任务,但更清晰):
if do == "n":
    print(1)
else:
    print("2")
return

P/S:所以你看:else 不是没用的。始终尝试再次检查您的代码并找到改进它的方法。

【讨论】:

  • 哦,所以: 1. 它可以用于错误的用户输入。 2. 这样,cuz 比不检查其余部分更有效率。对吧??
  • 完全正确。你明白了
  • 但是..我应该使用try except 用于错误的用户输入还是尽可能使用这些else 语句?我觉得try except 会更易于维护/可读,因为很明显正在发生什么,或者我应该使用这些吗? (如果可能)
  • 这取决于你的程序。如果用户输入错误,也不会出现异常。在这种情况下,您只能使用else
  • 就像我写的那样,尝试编写更多代码并自我改进。你会明白的更多。有很多关于ifelifelsetryexcept 的例子……有时候这个例子是正确的,但另一个例子是错误的。
【解决方案2】:

也许您需要一个带有真实代码的示例。让我们先使用带有elifelse 的那个。

x = 0
if x == 0:
    print('x == 0')
    x = 1
elif x == 1:
    print('x == 1')
    x = 2
else:
    print('x is not 0 or 1')

这将打印x == 0

现在我们将看看您喜欢的解决方案(以及您认为相同的解决方案)。

x = 0
if x == 0:
    print('x == 0')
    x = 1
if x == 1:
    print('x == 1')
    x = 2
print('x is not 0 or 1')

这将打印x == 0x == 1x is not 0 or 1

elifelse的使用不是编程风格的问题,而是编程逻辑的问题。

【讨论】:

    【解决方案3】:

    两段代码不等价:

    在第一个中,select 仅在它是“a”(更有效)时被测试一次,而 printselect 不是a、s 或 x。

    select = input("Enter 'a' to add, 's' to subtract, 'x' to exit: ")
    if select == "a":
        # code
    elif select == "s": 
        # code
    elif select == "x": 
        return
    else:
        print("some text")
    
    # *** This line is executed unless select is "x" ***
    

    但在您的代码中,print总是执行,除非 select 是“x”。此外,如果select 是“a”,则再次测试“s”和“x”。在这种情况下,额外的测试可能不会产生很大的开销,但如果select 是一个复杂的对象,那么比较(涉及方法调用)可能很重要。

    select = input("Enter 'a' to add, 's' to subtract, 'x' to exit: ")
    if select == "a":
        # code
    if select == "s": 
        # code
    if select == "x": 
        return
    
    # *** This line is executed unless select is "x" ***
    print("some text")
    

    除非,也就是说,您的代码中有多个 return 语句。通常认为仅从函数中的一个点return 是一种很好的做法。原因是这使得代码更易于遵循和维护,也更易于调试。

    不要执着于“浪费”一行代码。额外的行不一定效率较低,编译所花费的时间是微不足道的。在这种情况下,具有更多行的代码实际上更有效,因为运行时的测试更少。 Python 不像 shell(例如 bash)那样逐行解析和执行。更重要的是您的代码易于维护。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 2015-02-03
      • 2020-03-01
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多