Python中只有两种字符串(或类似字符串的对象)。
第一种是“Unicode”字符串,它们是字符序列。
第二种是字节(或“字节串”),它们是0到255之间的整数序列,通常使用某些假定的编码(如ASCII或UTF-8,这是一种在字节流中编码Unicode字符的规范)来呈现文本。
在Python 2中,默认值"my string"
是一个字节串。
前缀'u'表示“Unicode”字符串,例如u"my string"
。
在Python 3中,“Unicode”字符串成为默认值,因此"my string"
等同于u"my string"
。
要获取旧版Python 2字节串,可以使用前缀b"my string"(不适用于Python 3的最旧版本)。
还有两个前缀,但它们不影响字符串对象的类型,只影响其解释方式。
第一个是“原始”字符串,它不解释转义字符,如\n或\t。例如,原始字符串r"my_string\n"
包含文字反斜杠和'n'字符,而"my_string\n"
在行末包含换行符。
第二个是在Python 3的最新版本中引入的:具有前缀'f'的格式化字符串。在其中,花括号用于显示要解释的表达式。例如,在以下字符串中:
my_object = 'avocado'
f"my {0.5 + 1.0, my_object} string"
将被解释为"我的(1.5,鳄梨)字符串"
(逗号创建了一个元组)。这种解释发生在读取代码时立即进行;字符串之后没有任何特殊之处。
最后,您可以使用多行字符串符号:
"""this is my
multiline
string"""
在Python 2中,如果您没有使用任何前缀或只使用了'r'前缀,则字符串为字节串;如果使用了'u'前缀,则为Unicode字符串。
在Python 3中,如果没有使用任何前缀或只使用了'r'、'f'和'u'的组合,则为Unicode字符串。如果使用了'b'前缀,则为字节串。显然不允许同时使用'b'和'u'前缀。
r"string"
不代表正则表达式,它代表的是‘原始字符串’。u"string"
代表Unicode字符串,而b"string"
代表字节串。这些内容都在Python文档中有解释。一个经验法则是,字母与表示名称相同。 u 代表Unicode,b 代表bytes,r 代表原始字符串。在使用它们超过两次后您会逐渐习惯。同时在Python2和Python3之间也会有不同。” - Torxedu"string"
,而在Python 3中使用"string"
,当运行相同的代码时,因此有必要制作一张明确的比较表,显示不同的情况和不同版本2与3之间的差异。这比阅读Py2文档、阅读Py3文档、然后阅读几个问题+答案要容易得多,弄清楚2和3之间的区别在哪里。 - Basj