哪个 Python 条件返回语句是最 Pythonic 的?

Posted

技术标签:

【中文标题】哪个 Python 条件返回语句是最 Pythonic 的?【英文标题】:Which Python Conditional Return Statement Is The Most 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 的,或者是最佳实践方式。 【参考方案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 的好建议。假设条件语句对他们有更多的意义,这个问题的布尔部分只是为了让问题变得干净。我已经修好了。

以上是关于哪个 Python 条件返回语句是最 Pythonic 的?的主要内容,如果未能解决你的问题,请参考以下文章

Python - 在条件语句中使用返回

《python基础教程》第5章 条件循环和其他语句 读书笔记

Python-条件分支

Python入门-4控制语句:02单分支选择结构-条件表达式详解

魅力python------if - else 语句

Python是不是检查多条件if语句中的所有条件? [复制]