Python相当于C strtod

Waw*_*aws 7 python strtod

我正在努力将C++程序的一部分转换为Python,但是我在替换C函数strtod时遇到了一些麻烦.我正在处理的字符串由简单的数学方程组成,例如"KM/1000.0".问题是两个常量和数字是混合的,因此我无法使用float().

如何编写Python函数来模拟strtod哪个函数返回转换后的数字和下一个字符的位置?

NPE*_*NPE 4

我不知道有任何现有功能可以做到这一点。

然而,使用正则表达式编写一个非常容易:

import re

# returns (float,endpos)
def strtod(s, pos):
  m = re.match(r'[+-]?\d*[.]?\d*(?:[eE][+-]?\d+)?', s[pos:])
  if m.group(0) == '': raise ValueError('bad float: %s' % s[pos:])
  return float(m.group(0)), pos + m.end()

print strtod('(a+2.0)/1e-1', 3)
print strtod('(a+2.0)/1e-1', 8)
Run Code Online (Sandbox Code Playgroud)

更好的整体方法可能是构建一个词法扫描器,首先对表达式进行标记,然后使用标记序列而不是直接使用字符串(或者确实全力以赴构建 yacc 风格的解析器)。