字符串是不可变对象。
所有标准的序列操作都同样适用于字符串。
4.1字符串格式化与格式化输出
字符串格式化使用字符串格式化操作符即百分号%来实现。
基本的转换说明符:
- %字符:标记转换说明的开始。
- 转换标志(可选):-表示左对齐(默认是右对齐);+表示在转换值之前要加上正负号;“ ”字符表示正数之前应该保留空格;0表示转换值若位数不够则用0填充。
- 最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。
- 点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。
- 转换类型:d,f,s这些是常用的,分别表示整数,浮点数,字符串。
4.1.1简单转换
简单的转换只需要写出转换类型,很简单:
>>> 'Price of eggs: $%d' % 42
'Price of eggs: $42'
>>> from math import pi
>>> 'Pi: %f......' % pi
'Pi: 3.141593......'
>>> 'My name is %s' % 'Marry'
'My name is Marry'
4.1.2字段宽度和精度
转换说明符可以包括宽度和精度。字段宽度是转换后的值所保留的最小字符个数。两个参数都是整数,前面是字段宽度后面是精度用点(.)分隔。
注意:当只有宽度参数的时候可以没有点,但是只要有精度参数就一定要有点存在。
>>> '10%f' % pi
'103.141593'
>>> '%.2f' % pi
'3.14'
4.1.3符号,对齐和用0填充
在字段宽度和精度前还可以放一个表示标志的位,该标志可以是零、加号、减号或空格。
零表示数字会用0进行填充:
>>> '%010.2f' % pi #宽度为10不够用0填充
'0000003.14'
-表示左对齐:
>>> '%-10.2f' % pi
'3.14 '
“ ”正数前面加上空格:用于正负数对齐的时候比较有用
>>> print (('% 5d' % 10) +'\n' + ('% 5d' % -10))
10
-10
+表示不管是正负都把符号显示出来:
>>> print (('%+5d' % 10) +'\n' + ('%+5d' % -10))
+10
-10
4.1.4 format
format
str.format(*args, **kwargs)
传入任意参数
'{}{}{}'.format(s,t,r)
'{0}{0}{0}'.format(s,t,r)
'{2}{1}{0}'.format(s,t,r)
'{x}{y}{z}'.format(x=s,y=t,z=r) # 字典,无序
'{x}{x}{x}'.format(x=s,y=t,z=r) #dic = dict(x=s,y=t,z=r)
类似的:
格式化输出:
'%s%s%s' % (s,t,r)
'%s %s %s' % (s,t,r) #顺序传入 %s和()必须相等 %s-->str
4.1.5科学计数法
'%e' % 1 #'1.000000e+00' e+00=10^0
'%e' % 10
'%e' % 100 #'1.000000e+02' e+02 = 10^2
'%x' % 9 #16进制 0123456789abcdef
'%x' % 15
'%x' % 16
'%o' % 8 # 8进制 01234567 9第二轮多一个 11
'%o' % 9 # 11
'%o' % 10 # 12
4.2字符串方法
S.count(sub[, start[, end]]) -> int
S.find(sub[, start[, end]]) -> int #返回第一个出现的下标,会有返回-1
Return -1 on failure.
S.index(sub[, start[, end]]) -> int
Like S.find() but raise ValueError when the substring is not found.
S.endswith(suffix[, start[, end]]) -> bool #如果是以第一个参数结尾,返回True,反之返回False
S.startswith(prefix[, start[, end]]) -> bool #如果以第一个参数开头,返回True,反之返回False
S.isalpha() -> bool #判断字符串是否是字母(全为字母)
S.isdigit() -> bool #判断字符串是否是数字(全为数字)
S.lower() -> str #如果字符串全是小写,返回True
S.upper() -> str #如果字符串全是大写,返回True
S.replace(old, new[, count]) -> str #替换,可以用count指定替换次数,默认全部替换
S.split(sep=None, maxsplit=-1) -> list of strings #切割,默认全部以空格为分隔符切割,可以指定分隔符和切割次数。
S.join(iterable) -> str #连接,意思和split相反,以s为连接符对一个可迭代对象进行连接
>>> '*'.join('hello')
'h*e*l*l*o'
>>> ''.join('world')
'world'
s.strip() #默认去掉两侧的空格,也可以指定去掉其他字符,但是只能是两侧的
4.3 字符串的拼接
4种方法
(1)+号
>>> 'Hello'+'world'
'Helloworld'
(2)格式化输出
>>> 'I like %s' % 'Python'
'I like Python'
(3)format
这个格式化输出基本类似
>>> 'I like {}'.format('Python')
'I like Python'
(4)join函数
这个函数上面提到了,用来进行字符串拼接的
>>> c = ['hello','world']
>>> ''.join(c)
'helloworld'
4.4深浅拷贝
关于这部分内容可以参考前面的一篇博文: Python 直接赋值、浅拷贝和深拷贝