“u”和“r”字符串前缀到底有什么作用,什么是原始字符串文字?

2023-12-06

一边询问这个问题,我意识到我对原始字符串了解不多。对于自称是 Django 培训师的人来说,这很糟糕。

我知道什么是编码,我也知道什么u''自从我了解了什么是 Unicode 以来,就只有这个了。

  • 但有什么作用r''究竟做什么?它会产生什么样的字符串?

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

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

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


其实并没有什么“原始的”string“;有原始的字符串文字,它们正是由 标记的字符串文字'r'在开盘报价之前。

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

这种语法变体的存在主要是因为正则表达式模式的语法中含有大量反斜杠(但永远不会出现在末尾,因此上面的“except”子句并不重要),并且当您避免将它们中的每一个都加倍时,它看起来会更好一些 - - 就这样。它在表达本机 Windows 文件路径(使用反斜杠而不是像其他平台上的常规斜杠)方面也受到了一些欢迎,但很少需要(因为普通斜杠大多数在 Windows 上也能正常工作)并且不完善(由于“例外”子句)多于)。

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

不知道你所说的“去”是什么意思back“ - 本质上没有前后方向,因为没有原始字符串type,它只是表达完全正常的字符串对象、字节或 unicode 的替代语法。

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

例如,考虑(Python 2.6):

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“u”和“r”字符串前缀到底有什么作用,什么是原始字符串文字? 的相关文章

随机推荐