gpt4 book ai didi

python - 如何根据所需的精度将数字解析为 int 或 float?

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:52 25 4
gpt4 key购买 nike

要求:

  1. 输入可以是字符串或数字
  2. 如果输入可以被视为 int 而不会损失精度,则转换为 int
  3. 如果输入可以被视为 float ,则转换为 float

这是我使用它的代码部分。

def make_operand(symbol, left=None, right=None):
valid_symbols = ['*', '/', '+', '-']
if symbol in valid_symbols:
return Operand(symbol, left, right)

as_int = re.compile("^-?[0-9]+$").match(str(symbol))
as_float = re.compile("^[-+]?[0-9]*\.?[0-9]+$").match(str(symbol))

as_number = int(symbol) if as_int else float(symbol) if as_float else None

if as_number:
return NumericOperand(as_number)

raise ValueError("Invalid symbol or number")

这可行,但它看起来很乱而且闻起来不对。

使用 try block 的实现也可以,但看起来不那么简单:

    as_number = None
try:
as_float = float(symbol)
except ValueError:
as_float = None

if as_float:
as_int = int(as_float)
as_number = as_int if as_int == as_float else as_float

if as_number:
return NumericOperand(as_number)

raise ValueError("Invalid symbol or number")

是否有更好的方法,或者其中之一是否接近 Pythonic 做事方法?

最佳答案

如果您不介意第三方模块,有一个名为 fastnumbers 的 C 扩展模块正是为此目的而设计的。 fast_real函数完全符合您的要求(前提是您使用 coerce=True,在 fastnumbers>=0.7.4 上可用)。

完全公开,我是作者。

>>> from fastnumbers import fast_real
>>> fast_real('56')
56
>>> fast_real('56.0')
56
>>> fast_real('56.07')
56.07
>>> fast_real('56.07 lb')
'56.07 lb'
>>> fast_real(56.07)
56.07
>>> fast_real(56.0)
56.0
>>> fast_real(56.0, coerce=True)
56
>>> fast_real(56)
56
>>> fast_real('56.07 lb', raise_on_invalid=True)
Traceback (most recent call last):
...
ValueError: could not convert string to float: '56.07 lb'

关于python - 如何根据所需的精度将数字解析为 int 或 float?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36108580/

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