1、驻留机制的几种情况(交互模式) 1)字符串长度为0或1 2)符合标识符的字符串 3)字符串只在编译时驻留,而非运行时 4)[-5,246]之间的整数数字 sys.intern()强制2个字符串指向同一个对象 pycharm对字符串进行了优化处理 优点:当需要值相同的字符串时,可以直接从字符串池中拿来使用,避免繁琐的创建与销毁,提升效率节约内存,因此拼接字符串和修改字符串时会比较影响性能的 缺点:在需要字符串拼接时建议使用join方法,而不是+,因为join先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率比+高
2、查询 index()查找子串substr第一次出现的位置,如果子串不存在,则抛出ValueError rindex()查找子串substr最后一次出现的位置,如果子串不存在,则抛出ValueError find()查找子串substr第一次出现的位置,如果子串不存在,则返回-1 rfind()查找子串substr最后一次出现的位置,如果子串不存在,则返回-1
s1='python,python'
print(s1.index('py'))
print(s1.rindex('py'))
print(s1.find('mn'))
3、大小写转换 upper()字符串所有字符转成大写字母 lower()字符串所有字符转成小写字母 swapcase()字符串所有大写字母转成小写字母,小写字母转成大写字母 capitalize()把第一个字符转成大写,其余字符转成小写 title()每个单词的第一个字母转成大写,每个单词的剩余字符转成小写
s='hello world'
#转换后产生新的字符串
print(s.upper(),id(s),id(s.upper()))
print(s.lower(),id(s),id(s.lower()))
print(s.swapcase())
print(s.capitalize())
print(s.title())
4、内容对齐 center()居中对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数可选 ljust()左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数可选 rjust()右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数可选 zfill()右对齐,左边用0填充,该方法只接受一个参数,用于指定字符串的宽度
s='hello,python'
print(s.center(20,'*'))
print(s.ljust(20,'*'))
print(s.ljust(20))
print(s.rjust(20))
print(s.rjust(10))
print(s.zfill(20))
print(s.zfill(10))
5、分割与替换 split()与rsplit(),replace()
s='hello world python'
l1=s.split() #默认是空格分隔符
s2='hello|world|python'
print(s2.split('|')) #指定分隔符
print(s2.split('|',maxsplit=1)) 指定分割数量
print(s2.split('|',maxsplit=1)) #从右侧分割
s='hello world'
print(s.replace('world','python'))
s1='hello world world world'
print(s1.replace('world','python',2))#指定替换个数
s='hello world'
print(s.replace('world','python'))
s1='hello world world world'
print(s1.replace('world','python',2))#指定替换个数
6、比较
==比较的是value,is比较的是id
print('apple'>'app')
print('apple'>'bpp')
print(ord('a'),ord('b'))
print(ord('刘'))
print(chr(97),chr(98))
print(chr(21016))
7、格式化字符串 %为占位符,其中%s字符串,%i或id整数,%f浮点数
name='Alice'
age=12
#%,第一种
print('my name %s,my age %i'%(name,age))
#{}占位符+format,第二种
print('my name {0},my age {1}'.format(name,age))
#f-string,第三种
print(f'my name {name},my age {age}')
print('%10d'%99) #10表示宽度
print('%d'%99)
print('%f'%3.1415926)
print('%.3f'%3.1415926) #3表示精度
print('%10.3f'%3.1415926) #组合表示精度与宽度
print('------------')
print('{0}'.format(3.1415926))
print('{0:3}'.format(3.1415926)) #一共是3位数
print('{0:.3f}'.format(3.1415926))#小数点后3位
print('{:.3f}'.format(3.1415926))#小数点后3位
print('{:10.3f}'.format(3.1415926))#同时设置宽度和精度,宽度是10位,小数点后3位
8、编码转换 A计算机(str在内存中以unicode表示)—编码—byte字节传输—解码–B计算机中
s='白日依山尽'
#编码,GBK中一个中文占2个字符,UTF-8中占3个
print(s.encode(encoding='GBK'))
print(s.encode(encoding='utf-8'))
#解码,byte代表就是一个二进制数据(字节类型的数据)
byte=s.encode(encoding='GBK')
print(byte.decode(encoding='GBK'))
byte=s.encode(encoding='UTF-8')#编码解码类型需一致
print(byte.decode(encoding='UTF_8'))
|