爱学习,爱生活,会学习,会生活,人生有百学网更精彩!
爱学习 | 爱生活

《Python完全自学教程》免费在线连载4.2.2

发布于:百学网 2022-03-30

《Python完全自学教程》免费在线连载4.2.2

  收录于话题 #Python语言 69 个 #python 42 个 4.2.2 转义符

  如果在交互模式中这样输入:

  >>>print('what'syourname?')File"",line1print('what'syourname?')^SyntaxError:invalidsyntax

  出现了 SyntaxError(语法错误)引导的提示, SyntaxError 是一种错误类型(参阅第10章10.1节),其后的内容是对此错误的解释:“invalid syntax”(无效的语法)。

  产生错误的原因是 'what's your name?' 中出现了三个“单引号”。如果学过英语者理解此字符串,第二个“引号”(“what's”)是“ what is ”的缩写,不是构成字符串的引号的组成部分。但是,Python 解释器无法分辨。解决此错误的方法之一是使用双引号和单引号的嵌套。

  >>>print("what'syourname?")what'syourname?

  用双引号来包裹,双引号里面允许出现单引号。其实,反过来,单引号里面也可以包裹双引号。

  >>>print('youarelearning"PythonBook"')youarelearning"PythonBook"

  此外,还有一种解决方法:使用

  转义符

  ( Escape Character )。

  >>>print('what'syourname?')#(8)what'syourname?>>>print("youarelearning"PthonBook"")#(9)youarelearning"PthonBook"

  注释(8)中第二个“引号”前面增加了反斜杠( ),就得到了想要的输出结果。此处所用的反斜杠( )就是转义符,它的作用是使后面的“引号”(')不再具有其单独出现的语义。注释(9)中则用转义符分别使两个双引号(") 不再具有其单独出现的语义。

  以上是转义符的一个作用,它的另外一个作用是表示无法从键盘录入的字符,比如换行符——除非用4.2.1节中的注释(5)所定义的“多行字符串”。

  >>>poem'我住长江头, 君住长江尾。'>>>print(poem)我住长江头,君住长江尾。

  在返回的字符串中出现了一个 ,它就是换行符。如果不用“多行字符串”,可以这么做:

  >>>poem2="日日思君不见君, 共饮长江水。">>>print(poem2)日日思君不见君,共饮长江水。

  此处在定义字符串 poem2 时并未使用“三引号”,只是在其中增加了回车符( ),print(poem2) 的输出结果中就在 的位置换行。表4-2-1中列出了 Python 中常用的转义字符及其说明,供应用时查阅。

  表4-2-1 转义字符

  转义字符描述

  (在行尾时)续行符,即一行未完,转下一行

  反斜杠符号

  '单引号

  "双引号

  响铃

  退格(Backspace)

  e转义

  空

  换行

  纵向制表符

  横向制表符

  回车

  换页

  oyy八进制数。yy 代表的字符,例如:12 代表换行

  xyy十六进制数。yy 代表的字符,例如:0a 代表换行

  other其他的字符以普通格式输出

  建议读者在交互模式中测试上述转义符的显示效果。

  对于使用 Windows 系统的读者特别要注意,在此操作系统中,文件和目录的路径写法与类 Unix 系统不同。

  #以下是MacOS系统的路径,Linux与此一致/Users/qiwsir/Documents#以下是Windows系统的路径C: ew_bookspython

  如果在 Python 中建立 Windows 路径的字符串:

  >>>pth='c: ew_bookspython'#(10)>>>print(pth)c:ew_bookspython

  print(pth) 的结果则是被分割为两行,且路径名称有误,这是因为注释(10)的字符串中,Python 解释器将其中的 作为“换行”转义符了。为此,修改为:

  >>>pth='c:\new_bookspython'#(11)>>>print(pth)c: ew_bookspython

  比较注释(11)和(10)的差异,在(11)中用转义符 将其后的 符号“转义”,令其不再具有表4-2-1中的含义。

  此外,还有一种方法:

  >>>pth=r'c: ew_bookspython'#(12)>>>print(pth)c: ew_bookspython>>>pth'c:\new_books\python'>>>type(pth)

  注释(12)中以字母 r 作为字符串的前缀,这样所定义的对象称为

  原始字符串

  ( raw string )——依然是字符串类型。对字符串的引号所包裹着的内容,常称为

  字面量

  ( literal )。前缀 r 的作用效果就是自动在字面量中的 符号前面再添加 符号,从而达到令字面量中的 符号转义之目的。

  但是,原始字符串并非总能实现上面的效果,例如:

  >>>pth=r'c: ew_bookspython'#(13)File"",line1pth=r'c: ew_bookspython'^SyntaxError:EOLwhilescanningstringliteral

  在报错信息中出现的 EOL ,完整表述为“ End of Line ”,即行结尾处出现了错误。后面还有一个状语 while scanning string literal ,即告诉我们 Python 解释器在“扫描”字符串字面量时,结尾处有错误。有点疑惑!?

  从注释(13)的创建来看,其字符串字面量是“ c: ew_bookspython ”,结尾处的 符号是这个 Windows 路径的组成部分。但是,当写成注释(13)那样的时候,Python 解释器会把“ ' ”组合起来视为表4-2-1中所示的单引号,且是字面量的组成部分。这样,作为字符串的标志的单引号就少了一半,于是出现了 SyntaxError 异常。类似于:

  >>>p='pythonFile"",line1p='python^SyntaxError:EOLwhilescanningstringliteral

  因此,官方网站的文档中特别提示:Specifically, a raw literal cannot end in a single backslash (since the backslash would escape the following quote character).

  如何修改?

  >>>pth='c:\new_books\python\'#(14)>>>print(pth)c: ew_bookspython>>>pth=r'c: ew_bookspython'+'\'#(15)>>>pth'c:\new_books\python\'>>>print(pth)c: ew_bookspython

  注释(14)没有使用原始字符串,毫无疑问可以打印得到字符串字面量;注释(15)中则是原始字符串和字符串“相加”,也得到了同样效果——虽然解决了前面的报错,但是又出现了“字符串相加”这样一个令人迷茫的操作,正可谓“才下眉头,却上心头”。

  更多《Python完全自学教程》内容,请点击【阅读原文】

  作者: 老齐

  来源公众号:老齐教室

本站(www.100xue.net)部分图文转自网络,刊登本文仅为传播信息之用,绝不代表赞同其观点或担保其真实性。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系(底部邮箱),我们将及时更正、删除,谢谢

- END -
  • 相关文章