第17课 Python中 字符串基础、转义字符串、原字符串、Unicode字符串、格式化字符串

来源:互联网 发布:好用的飞机杯 知乎 编辑:程序博客网 时间:2024/04/29 16:01
1.字符串基础
用引号引起来的字符集合称之为字符串,这里的引号可以是一对单引号、双引号、三引号(单、双)。单引号和双引号字符串基本没啥区别,特殊的是用三引号引起来的字符串为何?举个例子来说明一下:比如打算输出Hello ‘Jame’...这个字符串该如何用print 打印输出呢?很简单!
s = "hello 'jame'..."
print s
输出结果如下:
hello 'jame'...
要输出Hello “Jame”...能直接把s里的单引号改成双引号么?
s = "hello "jame"..."
print s
不行Python会报错的!为何错了?原因在于Python在处理s 等号右边时会从左至右找到与h 前边的左双引号匹配的右双引号,两个双引号间的字符集为字符串,当找到j前的双引号结束,那余下的 jame“... 该如何理解呢?Python 理解不了就报错了!
咋办呢?解决办法有二:
(1)在jame字符串的j前边和k后边加上 ∖ 号就行,我们称之这种表达方式为转义字符,诸如C 语言里的 ∖ n和 ∖ t 均是转义字符。Python 会解析双引号里的各个字符,如遇 ∖  会将 ∖ 和其后边的字符组合成转义字符去理解的(最终按一字符长度处理)。
s = "hello \"jame\"..."
print s
输出结果如下:
hello "jame"...
(2)用三引号引起来的字符串Python是不关心字符串里的双引号和单引号的,直接输出”’hello “jame”...”’。
s = '''hello "jame"...'''
print s
s = """hello "jame"..."""
print s
输出结果如下:
hello "jame"...
hello "jame"...
一般单引号里可以有双引号,双引号里可以有单引号,三引号里可以有单引号和双引号。
print 'hello "xiongpanjava.com" !'
print 'hello """xiongpanjava.com""" !'
print "hello 'xiongpanjava.com' !"
print "hello '''xiongpanjava.com''' !"
print '''hello 'xiongpanjava.com' !'''
print '''hello "xiongpanjava.com" !'''
print '''hello """xiongpanjava.com""" !'''


print """hello 'xiongpanjava.com' !"""
print """hello '''xiongpanjava.com''' !"""
print """hello "xiongpanjava.com" !"""
以下会出错
print "hello """xiongpanjava.com""" !"
print "hello "xiongpanjava.com" !"
print 'hello 'xiongpanjava.com' !'
太复杂了,怎么办呢?这样去理解好了,Python解释器从左向右找到第一个匹配的引号,如果找到的这个匹配在最后,解释器判定这个字符串合法,如果后边还有字符判定字符串语法错误。“hello ”“”xiongpanjava.com“”“ !”这个字符串Python解释器找到o后边的双引号即认为“hello ”为打印输出的字符串,而之后的“”xiongpanjava.com“”“ !”就不知道如何理解了,便语法报错。
2.转义字符串
上边程序中语句print “hello ”xiongpan.com“ !”会报错,原因在于Python 解释器在处理字母j前的双引号时把这个双引号当作字符串尾部的双引号了,程序设计者是想输出字符串j前有一个双引号,那有办法实现么?这里可在j前边的双引号前加上 ∖ 符号, 这是Python语句解释器就不会再报错了,原因在于:Python发现字符串里有 ∖  会将 ∖  和后边的字符组合成一个一字节字符来输出。如果 ∖  后是双引号,则Python解释器会处理成字符’"’ 输出,这个操作称之为转义。’ ∖  +  字母’ 称之为转义字符。
print "hello \"\"\"xiongpan.com\"\"\" !"
print "hello \"xiongpan.com\" !"
print 'hello \'xiongpan.com\' !'
常见的转义字符有:
\n      回车换行
\t      下一制表位
\"      双引号
\'      单引号
\\      输出斜杠
3.原字符串
如果字符串本身就是有 ∖ 的,输出打印也要求 ∖ ,或者说字符串里的 ∖ 不和其后的字符被看成转义字符处理。那么需要在字符串前加上字母r,此时的字符串称之为原字符串,特点是原样打印, ∖ 不被处理成转义字符。
print "c:\temp\node\xiongpan.py"
print r"c:\temp\node\xiongpan.py"
看看结果就明白了,呵呵。
c:  emp
ode\xiongpan.py
c:\temp\node\xiongpan.py
4.unicode字符串
在python2.x中,unicode字符串需要在字符串前加u来表示,比如
str=u'汉字'
而在python3.x中,unicode字符串已经是默认格式,因此不再需要加u,如果你加了u,会报语法错误:
str=u'汉字'
SyntaxError: invalid syntax
注意:
(1)当文件使用utf-8编码时:非unicode字符中一个汉字的长度是3,unicode一个汉字长度是1;
(2)当文件使用gb2312 时, 非unicode字符中一个汉字的长度是2,unicode一个汉字长度是1;
见下边代码:
脚本1
# -*- coding: utf-8 -*-  
unicode = u'我'
str = '我'   
print len(unicode),len(str)   #输出 1    3  
脚本2
# -*- coding: gb2312 -*-   
unicode = u'我'   
str = '我' 
print len(unicode),len(str)   #输出 1    2
5.格式化字符串
"%"是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格式化(C语言中也是使用%)。
下面整理了一下Python中字符串格式化符合:
格式化符号 说明
%c 转换成字符(ASCII 码值,或者长度为一的字符串)
%r 优先用repr()函数进行字符串转换
%s 优先用str()函数进行字符串转换
%d / %i 转成有符号十进制数
%u 转成无符号十进制数
%o 转成无符号八进制数
%x / %X 转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写)
%e / %E 转成科学计数法(e / E控制输出e / E)
%f / %F 转成浮点数(小数部分自然截断)
%g / %G %e和%f / %E和%F 的简写
%% 输出% (格式化字符串里面包括百分号,那么必须使用%%)
string = "Hello\tWill\n"
print "%s" %string
print "%r" %string
其实,这里的差异是str()和repr()两个内建函数之间的差异:
str()得到的字符串是面向用户的,具有较好的可读性
repr()得到的字符串是面向机器的
通常(不是所有)repr()得到的效果是:obj == eval(repr(obj))
0 0