【问题标题】:Which Python Conditional Return Statement Is The Most Pythonic?哪个 Python 条件返回语句是最 Pythonic 的?
【发布时间】:2014-12-30 18:15:56
【问题描述】:

以下哪项是在使用条件语句时使用 Python 返回某些内容的正确方法?有关系吗?为什么?

# OPTION 1
if conditional:
    return a
else:
    return b


# OPTION 2
if conditional:
    return a
return b

【问题讨论】:

  • else 是多余的
  • 我不确定你是否理解语法正确的意思......或者你的老师可能不会
  • 从技术上讲,它们在语法上都是有效的。
  • 两者都是完全有效的并且可能产生相同的 p 码。如果conditional 是一个真正的布尔表达式(不仅仅是解释为布尔值的不同类型之一),那么return condition 会更清晰,尽管输出也可能相同。
  • 我修正了问题的标题,我的意思是哪个是最 Pythonic 的,或者是最佳实践方式。

标签: python function return conditional conventions


【解决方案1】:

我认为这可能是一个棘手的问题。第一个在语法上正确:

if conditional:
    return True
else:
    return False

在 Python 中,else 子句与其他任何引入套件的内容一样,必须以 : 字符结尾。

如果你解决了这个问题,那么它们在语法上都是有效的,并且在语义上都是有意义的。事实上,它们的意思是一样的。它们甚至可以编译成几乎相同的代码,除了第一个代码可能会导致 Python 为第三个永远不会被调用的“从函数末尾脱落”的情况生成一些额外的代码。

但是,正如iCodez's answer 解释的那样,这两种都是反模式;只需 return conditionalreturn bool(conditional),视情况而定。

请注意,即使在评估 conditional 引发异常的情况下,不同的可能性仍然都是等效的(直到回溯的内容)——它们都只会引发该异常.

【讨论】:

    【解决方案2】:

    正确的 Python 方式是:

    return conditional
    

    "Simple is better than complex"还记得吗? :)


    关于您编辑的问题,我会使用# OPTION 2,因为"Flat is better than nested." 并且此解决方案节省了缩进级别。在以下情况下,您会很感激:

    return b
    

    实际上是这样的:

    return very_long_and_unwieldy_name_that_you_cannot_change
    

    此外,在这种情况下,else: 是不必要的(在语法上和视觉上)并且是多余的;它只是浪费空间。

    也就是说,您可能需要考虑改用conditional expression

    return a if conditional else b
    

    aconditionalb 都很好用且简短时,这是一个非常简洁和优雅的替代方案。

    【讨论】:

    • +10000000000000 如果可以的话......这是我一直看到的可怕模式(在 OP 中)
    • 如果conditional 没有产生严格的布尔值并且你想要那个,那么return bool(conditional)
    • 假定conditional 是一个布尔表达式。如果它是一个返回将被解释为布尔值的非布尔值的表达式,那么 OP 的构造(它们中的任何一个)都是必要的。
    • @Sneftel:如果你明确想要更少的信息,你应该返回更少的信息。您不妨问为什么bool 本身会丢弃该信息。 kindall 的评论只是指出,如果你愿意,你可以选择这样做,而不需要像 OP 的代码那样增加额外的复杂性。
    • 对 n00bs 的好建议。假设条件语句对他们有更多的意义,这个问题的布尔部分只是为了让问题变得干净。我已经修好了。
    猜你喜欢
    • 2013-09-10
    • 2022-01-03
    • 2021-06-03
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多