栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

7 字符串

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7 字符串

字符串的驻留机制

字符串:在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'))	#解码
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/339757.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号