字符串:在Python中字符串是基本数据类型,是一个***不可变*** 的字符序列
驻留机制:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
- 驻留机制的几种情况(交互模式)
- 字符串的长度为0或1时
- 符合标识符的字符串,标识符_
- 字符串只在编译时进行驻留,而非运行时。使用+时可以驻留,使用join函数时不可以
- [-5,256]之间的整数数字
- sys中的intern方法强制2个字符串指向同一个对象
- PyCharm对字符串进行了优化处理
- 字符串驻留机制的优缺点
- 当需要值相同的字符串时:可以直接从字符串池里拿来使用。避免频繁的创建和销毁,提升效率和节约内存,因为拼接字符串和修改字符串是会比较影响性能的。
- 在需要进行字符串拼接时建议使用str类型的join方法,而非+ ,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高
#字符串中的大小写转换的方法 s = 'hello, python' a = s.upper() #转成大写之后,会产生一个新的字符串对象 print(a, id(a)) #HELLO, PYTHON 2468875240944 print(s,id(s)) #hello, python 2468875240752 b = s.lower() #转换之后,会产生一个新的字符串对象 print(b, id(b)) #hello, python 2468875239600 print(s, id(s)) #hello, python 2468875240752 print(b == s) #True print(b is s) #False内容对齐操作
| 方法名称 | 作用 |
|---|---|
| center() | 居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则则返回原字符串 |
| ljust() | 左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格如果设置宽度小于实际宽度则则返回原字符串 |
| rjust() | 右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格如果设置宽度小于实际宽度则则返回原字符串 |
| zfill() | 右对齐,左边用o填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身 |
s='hello,Python #居中对齐 print(s.center(20,'*')) #左对齐 print (s.ljust(20,’*')) print(s. ljust(10)) print(s.ljust(20)) #右对齐 print (s.rjust(20,’*')) print(s.rjust(20)) print(s.rjust(10)) #右对齐,使用0进行填充 print(s.zfill(20)) print(s.zfill(10))劈分操作
s = ' hello world Python'
lst = s.split()
print(lst) #['hello', 'world', 'Python']
s1 = 'hello|world| Python'
print(s1.split(sep='|')) #['hello', 'world', ' Python']
print(s1.split(sep='|', maxsplit=1)) #['hello', 'world| Python'] <-----------------区别
#rsplit(),从右开始劈分
print(s.rsplit()) #['hello', 'world', 'Python']
print(s1.rsplit('|')) #['hello', 'world', ' Python']
print(s1.rsplit(sep='|', maxsplit=1)) #['hello|world', ' Python'] <-----------------区别
判断操作
s = 'hello,python'
print('1', s.isidentifier()) #False
print('2', 'hello'.isidentifier()) #True
print('3', '张三'.isidentifier()) #True
print('4', '张三_123'.isidentifier())#True
print('5', 't'.isspace()) #True
print('6', 'abc'.isalpha()) #True
print('7', '张三'.isalpha()) #True
print('8', '张三1'.isalpha()) #False
print('9', '123'.isdecimal()) #True
print('10', '123四'.isdecimal()) #False
print('11', 'III'.isdecimal()) #False
print('10', '123四'.isdecimal()) #False
print('11', 'III'.isdecimal()) #False
注:汉字在python中属于字母
替换与合并操作| 功能 | 方法名称 | 作用 |
|---|---|---|
| 字符串替换 | replace() | 第1个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时可以通过第3个参数指定最大替换次数 |
| 字符串的合并 | join() | 将列表或元组中的字符串合并成一个字符串 |
s = 'hello,python'
print(s.replace('python', 'java')) #hello,java
s1 = 'hello,python,python,python'
print(s1.replace('python', 'java', 2)) #hello,java,java,python
lst = ['hello', 'java', 'python']
print('|'.join(lst)) #hello|java|python
print(''.join(lst)) #hellojavapython
t = ('hello', 'java', 'python')
print(''.join(t)) #hellojavapython
print('*'.join('python')) #p*y*t*h*o*n
比较操作
- 运算符:>,>=,<,<=,==,!=
- 比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较
- 比较原理:两字符进行比较时,比较的是其ordinal value(原始值)调用内置函数***ord***可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数***chr***,调用内置函数chr时指定ordinal value可以得到其对应的字符
切片操作== 与 is 的区别
==比较的是内容
is比较的是id
s = 'hello,python' s1 = s[:5] s2 = s[6:] print(s1) #hello print(s2) #python newstr = s1 + '!' +s2 print(newstr)#hello!python格式化字符串 占位符
# %
name = '张三'
age = 20
print('我叫%s,今年%d岁' % (name, age)) #我叫张三,今年20岁
# {}
print('我叫{0},今年{1}岁'.format(name, age)) #我叫张三,今年20岁
# f-string
print(f'我叫{name},今年{age}岁') #我叫张三,今年20岁
宽度精度
print('%10d' % 99)
print('%.3f' % 3.1415926)
#同时表示宽度和精度
print('%10.3f' % 3.1415926)
print('hellohello')
'''
运行结果:
99
3.142
3.142
hellohello
'''
#使用{}
#0表示有一个占位符
print('{0:.3}'.format(3.1415926)) #.3表示的是一共是3位数
print('{:.3f}'.format(3.1415926)) #.3f表示是3为小数
print('{:10.3f}'.format(3.1415926)) #同时设置宽度和精度,一共是10位,3位是小数
'''
3.14
3.142
3.142
'''
编码转换
编码:将字符串转换为二进制数据(bytes)
解码:将bytes类型的数据转换为字符串类型
s = '天涯共此时' #编码 print(s.encode(encoding='GBK')) #在GBK这种编码格式中,一个中文占两个字节 print(s.encode(encoding='UTF-8')) #在UTF-8这种编码格式中,一个中文占三个字符 #解码 #byte代表的是一个二进制数据(字节类型的数据) byte = s.encode(encoding='GBK') #编码 print(byte.decode(encoding='GBK')) #解码



