当我们转换一个简单的号码时,在内存或背景中实际发生的情况.或要串起的东西


4
str(4)

我只想知道原始数字和字符串号之间的差异,以及Python解释器如何将其转换为C,然后转换为机器代码。

如果您调用str(x)..在这种情况下,4 ... 4将成为字符串。因此,您得到了" 4"

Python解释器不会将其转换为C或机器代码。Python 编译器将其编译为Python bytecode,然后由Python虚拟机执行(用C编写并编译为本机代码)。

str(4)的字节码为以下:

  1           0 LOAD_NAME                0 (str)
              2 LOAD_CONST               0 (4)
              4 CALL_FUNCTION            1
              6 RETURN_VALUE

因此,它加载了str和常数4的函数对象,然后以该常数值作为其参数调用函数对象。

在引擎盖下,str功能将尝试调用内部"到串转换函数",该功能也可以使用int对象上的__str__访问。因此,您可以说str(something)将致电something.__str__()

__str__的实现取决于对象类型,对于整数,这只会将其转换为INT的小数字符串表示。自定义类型可以定义自己的__str__实现,该实现完全不同。

来自Python文档:

str()方法返回"非正式"或可打印的 给定对象的表示。

对于字符串,这将返回字符串本身。

如果没有提供编码和错误参数,则str()方法 内部调用对象的__str__()方法。

如果找不到 __str__()方法,它将调用repr(obj)。

repr(object)的区别是str(object)不 始终尝试返回eval();可以接受的字符串

其目标是返回可打印的字符串。如果没有参数 返回空字符串''

如果提供了编码和错误参数,则第一个参数 ( object)应该是字节般的对象(bytesbytearray)。

如果对象为bytesbytearray,则内部str()方法 调用bytes.decode(encoding, errors)

否则,它在调用the the the the the the the the the Buffer中的字节对象 decode()方法。

请参阅https://docs.python.org/2/library/functions.html#str有关详细信息

最新更新