gpt4 book ai didi

Python 相当于 atoi/atof

转载 作者:太空狗 更新时间:2023-10-29 16:59:16 25 4
gpt4 key购买 nike

Python 喜欢引发异常,这通常很棒。但是我正面临一些我非常想使用 C 的 atoi/atof 语义转换为整数的字符串 - 例如“3 of 12”、“3/12”、“3/12”的atoi,都应该变成3; atof("3.14 秒") 应该变成 3.14; atoi("-99 score") 应该变成 -99。 Python 当然有 atoi 和 atof 函数,它们的行为与 atoi 和 atof 完全不同,与 Python 自己的 int 和 float 构造函数完全一样。

我目前为止最好的,这真的很难看并且很难扩展到各种可用的浮点格式:

value = 1
s = str(s).strip()
if s.startswith("-"):
value = -1
s = s[1:]
elif s.startswith("+"):
s = s[1:]
try:
mul = int("".join(itertools.takewhile(str.isdigit, s)))
except (TypeError, ValueError, AttributeError):
mul = 0
return mul * value

最佳答案

如果您非常热衷于获得 c 的 atoi 的功能,为什么不直接使用它呢?例如,在我的 Mac 上,

>>> import ctypes, ctypes.util
>>> whereislib = ctypes.util.find_library('c')
>>> whereislib
'/usr/lib/libc.dylib'
>>> clib = ctypes.cdll.LoadLibrary(whereislib)
>>> clib.atoi('-99foobar')
-99

在 Linux、Windows 等中,相同的代码应该可以工作,除了如果您检查 whereislib 会看到不同的路径(只有在真正非常特殊的安装上,该代码才能找到C 运行时库)。

如果您热衷于避免直接使用 C 库,我想您可以获取相关前缀,例如使用诸如 r'\s*([+-]?\d+)' 之类的 RE,然后尝试 int

关于Python 相当于 atoi/atof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com