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
)应该是字节般的对象(bytes
或bytearray
)。如果对象为
bytes
或bytearray
,则内部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有关详细信息