官方Python3文档说这是关于将bytes
传递给class str
的单个参数构造函数:
将字节对象传递给str()而不进行编码或错误 参数属于返回非正式字符串的第一种情况 表示(另请参阅Python的-b命令行选项)。
参考:https://docs.python.org/3/library/stdtypes.html#str
非正式字符串表示 - >咦?
使用Python控制台(REPL),我发现以下奇怪之处:</ p>
>>> ''
''
>>> b''
b''
>>> str()
''
>>> str('')
''
>>> str(b'')
"b''" # What the heck is this?
>>> str(b'abc')
"b'abc'"
>>> "x" + str(b'')
"xb''" # Woah.
(问题标题可以改进 - 我很难找到更好的问题。请帮助澄清。)
答案 0 :(得分:1)
str
背后的概念似乎是它返回一个“可打印的”字符串,通常是以人类可理解的形式。 documentation实际上使用短语“nicely printable”:
如果既没有给出编码也没有给出错误,则str(object)返回 object .__ str __(),这是“非正式”或可打印的字符串 对象的表示。对于字符串对象,这是字符串 本身。如果object没有__str __()方法,则str()会下降 回到返回的repr(对象)。
考虑到这一点,请注意元组或列表的str
生成字符串版本,例如:
>>> str( (1, 2) )
'(1, 2)'
>>> str( [1, 3, 5] )
'[1, 3, 5]'
Python认为上述内容是这些对象的“可打印”形式。以此为背景,以下似乎更合理:
>>> str(b'abc')
"b'abc'"
如果没有提供编码,字节b'abc'
只是字节,而不是字符。因此,str
回退到“可打印的”形式,六个字符串b'abc'
可以很好地打印。