this question的时候,我意识到我对原始弦知之甚少.对于自称是Django教练的人来说,这太糟糕了.

我知道什么是编码,我知道单是u''就可以做什么,因为我得到了Unicode.

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

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

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

  • 顺便问一下,如果你的系统和文本编辑器字符集设置为UTF-8,u''真的能做什么吗?

推荐答案

没有什么"原始string";还有raw string literals,它正是在开始引号前用'r'标记的字符串文本.

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

这种语法变体之所以存在,主要是因为正则表达式模式的语法中充斥着反斜杠(但不是在末尾,所以上面的"Except"子句无关紧要),而且当您避免将每一个都重复使用时,它看起来会更好一些--仅此而已.它还流行于表示原生Windows文件路径(使用反斜杠,而不是其他平台上的常规斜杠),但很少需要(因为普通斜杠在Windows上也很好用),而且不完美(由于上面的"例外"子句).

r'...'是字节字符串(在Python2.*中),ur'...'是Unicode字符串(同样,在Python2.*中),另外三种引号中的任何一种也生成完全相同类型的字符串(例如,r'...'r'''...'''r"..."r"""..."""都是字节字符串,依此类推).

不确定您所说的"前进back"是什么意思--本质上没有后退和前进方向,因为没有原始字符串type,它只是一种替代语法,用于表达完全正常的字符串对象,字节或Unicode,尽管它们可能是字节或Unicode.

是的,在Python 2中,u'...' is当然总是与'...'不同——前者是unicode字符串,后者是字节字符串.文字的编码方式可能是一个完全正交的问题.

例如,考虑(Python 2.6):

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

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

Python相关问答推荐

Python-Polars:如何用两个值的平均值填充NA?

将嵌套列表的字典转换为数据框中的行

如何处理必须存在于环境中但无法安装的Python项目依赖项?

是什么导致对Python脚本的jQuery Ajax调用引发500错误?

使用regex分析具有特定字符的字符串(如果它们存在)

如何让我的Tkinter应用程序适合整个窗口,无论大小如何?

多处理代码在while循环中不工作

Class_weight参数不影响RandomForestClassifier不平衡数据集中的结果

对Numpy函数进行载体化

Pandas 在最近的日期合并,考虑到破产

Python上的Instagram API:缺少client_id参数"

如何使用数组的最小条目拆分数组

无法使用requests或Selenium抓取一个href链接

删除字符串中第一次出现单词后的所有内容

Python解析整数格式说明符的规则?

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

部分视图的DataFrame

如何防止Pandas将索引标为周期?

Flask Jinja2如果语句总是计算为false&

基于多个数组的多个条件将值添加到numpy数组