哪个 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 conditional
或 return 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
当a
、conditional
和b
都很好用且简短时,这是一个非常简洁和优雅的替代方案。
【讨论】:
+10000000000000 如果可以的话......这是我一直看到的可怕模式(在 OP 中) 如果conditional
没有产生严格的布尔值并且你想要那个,那么return bool(conditional)
假定conditional
是一个布尔表达式。如果它是一个返回将被解释为布尔值的非布尔值的表达式,那么 OP 的构造(它们中的任何一个)都是必要的。
@Sneftel:如果你明确想要更少的信息,你应该返回更少的信息。您不妨问为什么bool
本身会丢弃该信息。 kindall 的评论只是指出,如果你愿意,你可以选择这样做,而不需要像 OP 的代码那样增加额外的复杂性。
对 n00bs 的好建议。假设条件语句对他们有更多的意义,这个问题的布尔部分只是为了让问题变得干净。我已经修好了。以上是关于哪个 Python 条件返回语句是最 Pythonic 的?的主要内容,如果未能解决你的问题,请参考以下文章
《python基础教程》第5章 条件循环和其他语句 读书笔记