Python 如何将字符串转换为整数
How Python converts string to integer
这个问题不是关于 int
函数的用法,而是它是如何在内部完成的。
因为源代码在 C 中,所以我不明白那里发生了什么。
也许有人可以解释如何 Python 将字符串 "123"
转换为整数 123
。
对其进行了哪些操作?
https://github.com/python/cpython/blob/2d305e1c46abfcd609bf8b2dff8d2065e6af8ab2/Objects/longobject.c#L2075-L2366 包含您要查找的实现。虽然理解 C 很有用,但中间有一个大注释(从第 2132 行开始)解释了大部分方法。
将 python 字符串转换为 int 时,例如a = int("123",10)
,(将字符串“123”转换为以 10 为底数的整数)调用了一个 C 函数。
首先,它检查给定的计数基数是否 >= 2 且 <=36,或 0。(否则出错)
接下来,它忽略所有领先的 space。 (这样 " 123" = "123"
),
并检查该数字是否标记为正数 '+'
或负数 '-'
当基数为0时,检查字符串是否以'0x','0o', '0b', '0'
开头,并分别设置基数(十六进制、八进制、二进制、十进制)。
请注意,如果未指定基数,则默认基数为 10(十进制)。
然后使用 link posted by Paul Kehrer
处的代码注释中描述的算法,继续将字符数组转换为数字
尾随 space 也会被忽略,如果需要会引发错误 - 例如,如果字符串中间有一个 space,后跟一个数字,或者如果有一个非-数字字符。
这个问题不是关于 int
函数的用法,而是它是如何在内部完成的。
因为源代码在 C 中,所以我不明白那里发生了什么。
也许有人可以解释如何 Python 将字符串 "123"
转换为整数 123
。
对其进行了哪些操作?
https://github.com/python/cpython/blob/2d305e1c46abfcd609bf8b2dff8d2065e6af8ab2/Objects/longobject.c#L2075-L2366 包含您要查找的实现。虽然理解 C 很有用,但中间有一个大注释(从第 2132 行开始)解释了大部分方法。
将 python 字符串转换为 int 时,例如a = int("123",10)
,(将字符串“123”转换为以 10 为底数的整数)调用了一个 C 函数。
首先,它检查给定的计数基数是否 >= 2 且 <=36,或 0。(否则出错)
接下来,它忽略所有领先的 space。 (这样 " 123" = "123"
),
并检查该数字是否标记为正数 '+'
或负数 '-'
当基数为0时,检查字符串是否以'0x','0o', '0b', '0'
开头,并分别设置基数(十六进制、八进制、二进制、十进制)。
请注意,如果未指定基数,则默认基数为 10(十进制)。
然后使用 link posted by Paul Kehrer
处的代码注释中描述的算法,继续将字符数组转换为数字尾随 space 也会被忽略,如果需要会引发错误 - 例如,如果字符串中间有一个 space,后跟一个数字,或者如果有一个非-数字字符。