here说明了术语“字符串前缀”。
如果已经有一个已分配给变量的字符串怎么办,如何将字符串前缀添加到该变量(不使用相同的字符串)?可以为其分配一个新变量,或重新分配给相同的变量。
答案 0 :(得分:2)
您不能追溯添加或删除字符串文字前缀。制作完成后,它只是一个str
(或带有bytes
前缀的b
)。如果您需要将原本bytes
的内容转换为str
,反之亦然,则分别使用bytes.decode
或str.encode
方法,就像在任何{{ 1}}或bytes
,无论它是否以文字开头,因为在评估文字之后,文字字符串和非文字字符串之间没有区别。
答案 1 :(得分:1)
通常,您不能。字符串前缀是语法的一部分,而不是数据。换句话说,他们不会创建不同的 type 字符串,而是以不同的方式创建字符串 。
u
在Python 3中没有任何作用。It only exists for compatibility with Python 2。
f
can be emulated with str.format()
for simple cases,但是要完全模拟f字符串,您必须对其进行评估,但必须使用that's a security risk since f-strings can contain arbitrary code。
r
can be emulated with str.encode('unicode_escape').decode()
in some cases,但不是全部,例如,此字符串文字是有损的:
>>> r'\x61'
'\\x61'
>>> s = '\x61'
>>> s
'a'
>>> s.encode('unicode_escape').decode()
'a'
b
是一个例外,因为它确实创建了不同的类型:bytes
对象。可以使用raw_unicode_escape编码来模拟它,尽管我没有使用它的经验,所以我不确定是否相同:
>>> b'a\x89\u2013'
b'a\x89\\u2013'
>>> 'a\x89\u2013'
'a\x89–'
>>> 'a\x89\u2013'.encode('raw_unicode_escape')
b'a\x89\\u2013'
>>> 'a\x89\u2013'.encode('raw_unicode_escape').decode('raw_unicode_escape')
'a\x89–'
语法也仅供参考,stringprefix
,在文本中只是“前缀”。
答案 2 :(得分:0)
根据Python 2 manual
Python源代码中的Unicode文字
在Python源代码中,Unicode文字以字符串形式编写 前缀为“ u”或“ U”字符:u'abcdefghijk'。具体代码 可以使用\ u转义序列来写点,随后 由四个十六进制数字给出代码点。 \ U转义序列为 相似,但期望8位十六进制数字,而不是4位。
但是在Python 3中
从Python 3.0开始,该语言的str类型包含Unicode字符, 表示使用“ unicode岩石!”,“ unicode岩石!”创建的任何字符串, 或将三引号字符串语法存储为Unicode。
Python源代码的默认编码为UTF-8,因此您可以 只需在字符串文字中包含Unicode字符即可:
对于已创建的变量,无论是通过用户输入还是通过读取文件等,您都必须阅读每种方法如何操作unicodes