Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何将字节转换为浮点?_Python_Python 3.x_Character Encoding - Fatal编程技术网

Python如何将字节转换为浮点?

Python如何将字节转换为浮点?,python,python-3.x,character-encoding,Python,Python 3.x,Character Encoding,我有以下代码片段: #!/usr/bin/env python3 print(float(b'5')) 它打印5.0,没有错误(在使用utf-8编码的Linux上)。我很惊讶它没有给出错误,因为Python不应该知道字节对象使用了什么编码 任何细节?当传递一个字节对象时,float()将对象的内容视为ASCII字节。这就足够了,因为从字符串到浮点的转换只接受ASCII数字和字母,再加上和(唯一允许的非ASCII码点是空白码点),这类似于int()处理字节输入的方式 在引擎盖下,实现如下功能:

我有以下代码片段:

#!/usr/bin/env python3

print(float(b'5'))
它打印
5.0
,没有错误(在使用utf-8编码的Linux上)。我很惊讶它没有给出错误,因为Python不应该知道字节对象使用了什么编码


任何细节?

当传递一个
字节
对象时,
float()
将对象的内容视为ASCII字节。这就足够了,因为从字符串到浮点的转换只接受ASCII数字和字母,再加上
(唯一允许的非ASCII码点是空白码点),这类似于
int()
处理
字节
输入的方式

在引擎盖下,实现如下功能:

  • 因为输入不是字符串,所以在对象上调用(对于
    str
    对象,代码直接跳到
    PyFloat\u FromString
  • PyNumber\u Float()
    检查
    \u Float\u
    方法,但如果该方法不可用,它将调用
  • PyFloat\u FromString()
    不仅接受
    str
    对象,还接受任何对象。
    字符串
    名称是Python2的保留,Python3
    str
    类型在C实现中称为
    Unicode
  • bytes
    对象实现缓冲协议,用于访问包含字节的内部C缓冲区
  • 然后,使用名为
    \u Py\u string\u to \u number\u的两个内部函数的组合,以及带有下划线()
    和来自\u string\u internal()的
    float\u,将ASCII字节解析为浮点值
对于实际的
str
字符串,CPython实现实际上通过只查看输入值中的ASCII码点,并将任何非ASCII空白字符转换为ASCII 0x20空格,然后使用相同的
\u Py\u string\u到带下划线的\u number\u,将任何非ASCII字符串转换为ASCII字节序列()
/
float\u from\u string\u inner()
组合


我认为这是文档中的一个bug,必须对其进行更新。

您有没有更新?和@Kasramvd:
float()
的文档说明它接受一个
str
、一个数字或一个实现
\uuuuuu float\uuuu
的类型
bytes
没有实现@MartijnPieters的
\uuuu float\uuuu
。我们提到,如果参数是字符串,它应该包含一个十进制数,可以选择前面有符号,也可以选择嵌入空格。
b'5'
不遵循这个规则吗?虽然它应该在文档中明确说明。这是一个公平的问题,因为。@Kasramvd:不,它没有。
字节
类型不被认为是字符串。我知道python不会有什么东西是这个家伙不知道的。谢谢你的回答。因此,需要明确的是,对于某些编码,例如UTF-16?@static\u rtti:绝对会失败,因为不接受
\x00
字节。字节必须仅为ASCII,并且符合
float()
字符串解释规则。