【发布时间】:2020-10-19 01:48:19
【问题描述】:
在 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 代码,但这只是我长期以来的一个问题(可能是一个愚蠢的问题)。如果这很愚蠢,请不要烧毁我。
我并没有真正编写需要这种优化的代码(目前);这只是一个问题,所以我可以在未来改进我的代码。
【问题讨论】:
-
这真的取决于 1) 你的情况是什么,2) 你多久会出错。如果除特殊情况(数据或服务器故障)外您不希望出错,try-except 会更快。如果您将其用作流量控制机制,那不是一个好主意。
-
如果我将它用于预处理输入(例如定义函数或定义对象/类时)会怎样
-
您实际上是在询问两种常用的方法:EAFP 和 LBYL。答案是......这取决于您的代码和您的情况。这是关于同一主题的讨论,但针对 Java:stackoverflow.com/questions/404795/lbyl-vs-eafp-in-javaFWIW 我不一定同意那里接受的答案中的观点,但这由你来判断。
-
if some_input is int:正在测试输入是否是类int... -
你最后的选择是错误的;除了大量重复自己之外,它还捕获了非常常见的错误类型,这些错误类型可能由于输入的类型/值以外的原因而引发,从而导致您处理意外的异常。尽量限制你
trys的范围,避免意外处理你没想到也不能合理处理的问题导致的异常。
标签: python python-3.x function if-statement optimization