String Python3.6将字符串转换为浮动-错误还是功能?
我正在处理字符串并从中提取浮点数,浮点数可以在字符串中的不同位置。然后我注意到Python版本2.7和3.6之间的不同行为。例如,包含非数字文本的字符串,如String Python3.6将字符串转换为浮动-错误还是功能?,string,python-2.7,casting,python-3.6,String,Python 2.7,Casting,Python 3.6,我正在处理字符串并从中提取浮点数,浮点数可以在字符串中的不同位置。然后我注意到Python版本2.7和3.6之间的不同行为。例如,包含非数字文本的字符串,如\uuuu 以下是我发现的总结: Python 2.7: [3]中的:浮点('0_001') ValueError:浮点()的文本无效:0_001 在[4]中: Python 3.6: [16]中的:浮点('0_001') Out[16]:1.0 我期望从演员阵容中获得的行为与2.7版本是一致的,而且由于0_001和1.0之间的距离非常大
\uuuu
以下是我发现的总结:
Python 2.7:
[3]中的:浮点('0_001')
ValueError:浮点()的文本无效:0_001
在[4]中:
Python 3.6:
[16]中的:浮点('0_001')
Out[16]:1.0
我期望从演员阵容中获得的行为与2.7版本是一致的,而且由于0_001
和1.0
之间的距离非常大,我怀疑这在3.6版本中是一个相当大的错误,但我可能错了
如果我将版本3.6中的\uu
文本替换为任何其他内容,例如-*、
等,我将得到预期的值错误:
如果这不是一个bug,而是一个特性,有人能向我解释为什么这样的演员阵容是有效的吗
Python 2.7版本:
Python 2.7.16 (default, Apr 6 2019, 01:42:57)
IPython 5.8.0 -- An enhanced Interactive Python.
Python 3.6版本:
Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 19:07:31)
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
编辑:
根据Sach的回答,这是v3.6的实际功能,但我仍然不明白为什么会这样?它有什么作用
[2]中的:浮点('0.0_1_2_3_4')
Out[2]:0.01234
从源代码和,您可以看到下划线的具体处理,同时从字符串转换浮点值
这在2.7中不存在,并从3.6中添加
它检查是否存在下划线,然后检查以下条件
它还描述了使用它们的规则。谢谢!所以这是一个“特征”。。。然而,我的问题是为什么允许下划线,它的目的是什么?谢谢!所以这是一个“特征”。。。然而,我的问题是为什么允许下划线,它的目的是什么?目的是让更大的数字更容易让人阅读,比如
1\u 000\u 000
参见PEP 515谢谢!Thant现在说得通了。但是,在小数点之后肯定不允许这样做吗?所以这毕竟是一个bug:)0.000\u 000\u 1
也更具可读性,它不是一个bug,谢谢!其目的是使更大的数字更易于人类阅读,如1\u 000\u 000
参见PEP 515谢谢!Thant现在说得通了。但是,在小数点之后肯定不允许这样做吗?所以这毕竟是一个bug:)0.000\u 000\u 1
也更具可读性,它不是一个bug,谢谢!