在习题 9 中我你接触了一些新东西。我让你看到两种让字符串扩展到多行的方法。第一种方法是在月份之间用 \n (back-slash n )隔开。这两个字符的作用是在该位置上放入一个“新行(new line)”字符。
使用反斜杠 \ (back-slash) 可以将难打印出来的字符放到字符串。针对不同的符号有很多这样的所谓“转义序列(escape sequences)”,但有一个特殊的转义序列,就是 双反斜杠(double back-slash) \\ 。这两个字符组合会打印出一个反斜杠来。接下来我们做几个练习,然后你就知道这些转义序列的意义了。
另外一种重要的转义序列是用来将单引号 ' 和双引号 " 转义。想象你有一个用双引号引用起来的字符串,你想要在字符串的内容里再添加一组双引号进去,比如你想说"I "understand" joe.",Python 就会认为 "understand" 前后的两个引号是字符串的边界,从而把字符串弄错。你需要一种方法告诉 python 字符串里边的双引号不是真正的双引号。
要解决这个问题,你需要将双引号和单引号转义,让 Python 将引号也包含到字符串里边去。这里有一个例子:
"I am 6'2\" tall." # 将字符串中的双引号转义
'I am 6\'2" tall.' # 将字符串种的单引号转义
第二种方法是使用“三引号(triple-quotes)”,也就是 """,你可以在一组三引号之间放入任意多行的文字。接下来你将看到用法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | tabby_cat = "\tI'm tabbed in."
persian_cat = "I'm split\non a line."
backslash_cat = "I'm \\ a \\ cat."
fat_cat = """
I'll do a list:
\t* Cat food
\t* Fishies
\t* Catnip\n\t* Grass
"""
print tabby_cat
print persian_cat
print backslash_cat
print fat_cat
|
注意你打印出来的制表符,这节练习中的文字间隔对于答案的正确性是很重要的。
$ python ex10.py
I'm tabbed in.
I'm split
on a line.
I'm \ a \ cat.
I'll do a list:
* Cat food
* Fishies
* Catnip
* Grass
$
下面列出了 Python 支持的所有转义序列。很多你也许不会用到,不过还是要记住它们的格式和功能。试着在字符串中应用它们,看看它们的功能。 +—————-+————————————————————-+ | 转义符 | 功能 | +================+=============================================================+ | \\ | Backslash () 反斜杠 | +—————-+————————————————————-+ | \' | Single quote (‘) 单引号 | +—————-+————————————————————-+ | \" | Double quote (”) 双引号 | +—————-+————————————————————-+ | \a | ASCII Bell (BEL) 响铃符 | +—————-+————————————————————-+ | \b | ASCII Backspace (BS) 退格符 | +—————-+————————————————————-+ | \f | ASCII Formfeed (FF) 进纸符 | +—————-+————————————————————-+ | \n | ASCII Linefeed (LF) 换行符 | +—————-+————————————————————-+ | \N{name} | Unicode 数据库中的字符名,其中 name 就是它的名字(Unicode only) | +—————-+————————————————————-+ | \r ASCII | Carriage Return (CR) 回车符 | +—————-+————————————————————-+ | \t ASCII | Horizontal Tab (TAB) 水平制表符 | +—————-+————————————————————-+ | \uxxxx | 值为 16 位十六进制值 xxxx 的字符(Unicode only) | +—————-+————————————————————-+ | \Uxxxxxxxx | 值为 32 位十六进制值 xxxx 的字符(Unicode only) | +—————-+————————————————————-+ | \v | ASCII Vertical Tab (VT) 垂直制表符 | +—————-+————————————————————-+ | \ooo | 值为八进制值 ooo 的字符 | +—————-+————————————————————-+ | \xhh | 值为十六进制数 hh 的字符 | +—————-+————————————————————-+
试着运行下面一段代码看看结果:
while True:
for i in ["/","-","|","\\","|"]:
print "%s\r" % i,