gpt4 book ai didi

python - 是否有更 Pythonic 的方法来测试对象是否为数字或返回其值?

转载 作者:太空宇宙 更新时间:2023-11-04 10:41:27 24 4
gpt4 key购买 nike

<分区>

我还没有尝试过装饰器或函数中的函数,但这种当前的非 Pythonic 方法似乎有点令人费解。我不喜欢在检查 return_type 时需要重复自己(3 次)?

欢迎提出任何建议,特别是如果重复可以以优雅的方式处理。请注意,我对测试对象是否为数字的大量引用并不感兴趣,因为我相信这部分已包含在我的解决方案中。我有兴趣解决 3x 重复以处理返回类型。此外,虽然我欣赏 locale 方法是处理国际化的更严格的方法,但我更喜欢允许调用者更灵活地选择字符的简单性。

谢谢

def is_number(obj, thousand_sep=',', decimal_sep=None, return_type='b'):
""" determines if obj is numeric.

if return_type = b, returns a boolean True/False
otherwise, it returns the numeric value

Examples
--------
>>> is_number(3)
True
>>> is_number('-4.1728')
True
>>> is_number('-4.1728', return_type='n')
-4.1728
>>> is_number(-5.43)
True
>>> is_number("20,000.43")
True
>>> is_number("20.000,43", decimal_sep=",", thousand_sep=",")
True
>>> is_number("20.000,43", decimal_sep=",", thousand_sep=".", return_type="n")
20000.43
>>> is_number('Four')
False
# I am a few light years away from working that one out!!!
"""
try:
if is_string(obj):
if decimal_sep is None:
value = float(obj.replace(thousand_sep, ""))
else:
value = float(obj.replace(thousand_sep, "").replace(decimal_sep, "."))
if return_type.lower() == 'b':
return True
else:
return value
else:
value = float(obj)
if return_type.lower() == 'b':
return True
else:
return value
except ValueError:
return False
if return_type.lower() == 'b':
return False
else:
return None

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