Python3:嵌套函数调用和if语句哪个更快(尝试/除外非常快)。

3
在Python3中,假设我遇到需要整数的情况。那么像这样做是否更快:
processed_number = int(round(float(some_input)))

还是我应该这样做:

if some_input is int:
    processed_number = some_input
else:
    processed_number = int(round(float(some_input)))

或者也许

try:
    some_statement_taht_needs_int(some_input)
# except TypeError:
#    processed_number = int(round(float(some_input)))
#    some_statement_taht_needs_int(some_input)
# Apparently, it's better to cut down on exception handling: I might handle something the wrong way
except ValueError:
    # The same thing
    processed_number = int(round(float(some_input)))
    some_statement_taht_needs_int(some_input)

如果我的问题很愚蠢,我很抱歉,因为两种方法都使用函数调用。我只是想知道每种方法之间是否存在显着的时间差异。我知道我不应该过于优化 Python 代码,但这只是一个我长期以来一直有的问题(可能很愚蠢)。如果这个问题很愚蠢,请不要责怪我。


目前我没有编写需要进行此优化的代码;这只是一个问题,以便我将来可以改进我的代码。


你基本上在询问两种常用的方法:EAFP和LBYL。答案是...这取决于你的代码和情况。这里有一个关于同一主题的讨论,但是针对Java:https://dev59.com/questions/i3RC5IYBdhLWcg3wG9Xp 顺便说一句,我不一定同意那里被接受的答案中的观点,但这由你来判断。 - cs95
2
如果 some_inputint 类,则此代码正在测试输入是否为 int 类... - ShadowRanger
你的最后一种选项是不好的;除了重复自己之外,它会捕获非你输入的类型/值引起的常见错误类型,导致你处理意料之外的异常。尽可能地限制try语句的范围,以避免意外地处理由于你无法预期和合理处理的问题引起的异常。 - ShadowRanger
哦,我不知道!@ShadowRanger,谢谢你告诉我! - theX
等一下:你的意思是 if isinstance(some_input, some_class):if type(some_input) is some_class 是两种不同的方式,对吗 @ShadowRanger?难道 if some_input is some_class 也是另一种方式吗?我稍后会进行一些分析。 - theX
显示剩余5条评论
1个回答

1
通常情况下,您不会预期这样做的频率很高,以至于它成为主要的性能问题。您可能有其他部分的代码是性能限制因素。
通常最好编写最清晰、最明显的方式,以便下一个查看您代码的人可以理解。不要过度优化。除非它是极其明显的缓慢且经常发生的事情,否则只需以最清晰、最明确的方式编写您的代码。如果必要,之后您可以对其进行分析以找出它的缓慢之处并进行修复。
通常您会发现这些问题不是瓶颈所在。

我询问的是性能问题,这是一个不错的答案。但其他评论告诉我EAFP才是正确的方式。既然你告诉我了,那么这是我的最终结论:除非嵌套函数会使代码变得不清晰,否则我将使用EAFP - theX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接