gpt4 book ai didi

python - "u"和 "r"字符串前缀究竟是做什么的,什么是原始字符串文字?

转载 作者:IT老高 更新时间:2023-10-28 12:01:02 27 4
gpt4 key购买 nike

在询问 this question 时,我意识到我对原始字符串知之甚少。对于自称是 Django 培训师的人来说,这很糟糕。

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

  • 但是 r'' 到底是做什么的呢?会产生什么样的字符串?

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

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

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

最佳答案

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

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

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

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

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

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

例如,考虑(Python 2.6):

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

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

关于python - "u"和 "r"字符串前缀究竟是做什么的,什么是原始字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2081640/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com