我尝试了几种方法,我真的只关心性能,而不是正确性。我注意到基于正则表达式的实现比使用类型强制的实现慢 3-4 倍。还有其他更有效的方法吗?
def IsNumber(x):
try:
_ = float(x)
except ValueError:
return False
return True
def IsNumber2(x):
import re
if re.match("^\d*.?\d*$", x) == None:
return False
return True
谢谢!
最佳答案
首先,他们做的不是同一件事。例如, float 可以指定为“1e3”,而 float() 将接受它。它也不是 coercion , 但转化。
其次,不要在 IsNumber2 中导入 re,尤其是当您尝试将它与 timeit 一起使用时。在函数之外进行导入。
最后,float() 更快并不让我感到惊讶。这是一个用 C 语言编写的用于特定目的的专用例程,而正则表达式必须转换为可解释的形式。
您使用 float() 的第一个版本是否足够快?它应该是,而且我不知道在 Python 中做同样事情的更好方法。
关于Python:识别数字字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248185/