没有真正的“rawstring”;有rawstring literals,这正是在开始引号前用'r'标记的字符串文本。
“raw string literal”是一种与string literal稍有不同的语法,其中反斜杠\被视为意味着“只是一个反斜杠”(除非它正好位于引号之前,否则将终止该literal)--没有“转义序列”来表示换行符、制表符、反空格、表单源等等。在普通的字符串文本中,每个反斜杠必须加倍,以避免被当作转义序列的开始。
这种语法变体之所以存在,主要是因为正则表达式模式的语法中有大量的反斜杠(但永远不会在结尾,所以上面的“except”子句无关紧要),而且如果避免将每个反斜杠都加倍,它看起来会更好一些——仅此而已。它还获得了一些流行来表示本机Windows文件路径(使用反斜杠而不是像在其他平台上那样使用常规斜杠),但这很少需要(因为普通斜杠在Windows上也能正常工作)和不完美(由于上面的“except”子句)。
r'...'是一个字节字符串(在Python 2.*中),ur'...'是一个Unicode字符串(同样,在python2.*中),其他三种引用也会生成完全相同类型的字符串(例如r'...',r'''...''',r"...",r"""..."""都是字节字符串,等等)。
不知道“goingback”是什么意思-没有本质上的后退和前进方向,因为没有原始字符串type,它只是一种替代语法,可以表示完全正常的字符串对象、字节或unicode。
是的,在Python2.*中,u'...'当然是而不是'...'--前者是unicode字符串,后者是字节字符串。文字的编码方式是完全正交的。
例如,考虑(Python 2.6):>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34
Unicode对象当然占用了更多的内存空间(显然,对于非常短的字符串来说,差别很小;-)。