小编典典

“u”和“r”字符串标志到底是做什么的,什么是原始字符串文字?

all

我知道什么是编码,而且我知道u''单独做什么,因为我知道什么是 Unicode。

  • 但是具体r''做什么呢?它会产生什么样的字符串?

  • 最重要的是,到底做了ur''什么?

  • 最后,是否有任何可靠的方法可以从 Unicode 字符串返回到简单的原始字符串?

  • 啊,顺便说一句,如果您的系统和文本编辑器字符集设置为 UTF-8,u''实际上有什么作用吗?


阅读 120

收藏
2022-03-02

共1个答案

小编典典

实际上没有任何“原始 字符串 ”;有原始 字符串文字 ,它们正是'r'在开头引号之前用 a 标记的字符串文字。

“原始字符串文字”与字符串文字的语法略有不同,其中反斜杠 ,\被视为“只是一个反斜杠”(除非它出现在会终止文字的引号之前)-
否“转义序列”来表示换行符、制表符、退格符、换页符等。在普通字符串文字中,每个反斜杠必须加倍以避免被视为转义序列的开始。

这种语法变体的存在主要是因为正则表达式模式的语法带有大量反斜杠(但从不在末尾,因此上面的“except”子句无关紧要)并且当您避免将它们中的每一个加倍时,它看起来会更好一些
- - 就这样。表达本机 Windows 文件路径(使用反斜杠而不是其他平台上的常规斜杠)也获得了一定的普及,但这很少需要(因为普通斜杠在 Windows
上也能正常工作)并且不完美(由于“except”子句更多)。

r'...'是字节字符串(在 Python 2. 中),ur'...'是 Unicode 字符串(同样,在 Python 2.
中),并且其他三种引用中的任何一种也产生完全相同类型的字符串(例如r'...', r'''...''',
r"...",r"""..."""都是字节串,依此类推)。

不确定“ 返回 ”是什么意思 - 本质上没有前后方向,因为没有原始字符串 类型 ,它只是表达完全正常的字符串对象、字节或 unicode
的另一种语法。

是的,在 Python 2.u'...' * ,当然总是与 just 不同'...'——前者是 unicode
字符串,后者是字节字符串。可以用什么编码来表达文字是一个完全正交的问题。

例如,考虑(Python 2.6):

>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34

Unicode 对象当然会占用更多的内存空间(很明显,对于非常短的字符串来说差异非常小;-)。

2022-03-02