python学习 --- 字符串基础

目录

一、字符串的驻留机制

1、驻留机制

2、驻留机制的几种情况(使用交互模式)

3、强制驻留

4、字符串驻留机制的优缺点

二、字符串的常用操作

1、字符串的查询操作

2、字符串大小写转换操作

3、字符串内容对齐操作

4、字符串劈分操作

5、判断字符串操作

6、字符串的替换与合并

 三、字符串的比较操作

四、字符串的切片操作

五、格式化字符串

1、%作为占位符

2、{}作为占位符

3、f-string

六、字符串的编码转换

1、为什么需要字符串的编码转换?

2、编码与解码的方式


一、字符串的驻留机制

1、驻留机制

在Python中字符串是基本数据类型,是一个不可变的字符序列。

仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量

a = 'python' #单引号,双引号,三引号均可
b = "python"
c = '''python'''
print(a, id(a))
print(b, id(b))
print(c, id(c))

再来看看控制台的输出结果------> 发现它们的id是一样的

说明这里的a对象,b对象,c对象再内存中只有一份

2、驻留机制的几种情况(使用交互模式)

为什么使用交互式?

因为PyCharm对字符串进行了优化处理,对内容相同的字符串做了强制处理。

  • 字符串的长度为0或1时
  • 符合标识符的字符串
  • 字符串只在编译时进行驻留,而非运行时
  • [-5,256]之间的整数数字 

 

 字符串只在编译时进行驻留,而非运行时------>看注释

a = 'abc'
b = 'ab'+'c'
c = ''.join(['ab','c'])
print(a is b) #True
print(a is c) #False
# b在编译时就接上了成为'abc',进行了驻留
# c在运行时成为'abc',没有驻留
# 所以此时a,b指向同一块内存空间,而c指向另一块内存空间

3、强制驻留

sys中的intern方法强制2个字符串指向同一个对象。

4、字符串驻留机制的优缺点

  • 当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
  • 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new一次对象,效率要比"+"效率高。

二、字符串的常用操作

1、字符串的查询操作

s = 'hello,hello'
print(s.index('lo')) #3
print(s.find('lo')) #3
print(s.rindex('lo')) #9
print(s.rfind('lo')) #9

2、字符串大小写转换操作

3、字符串内容对齐操作

4、字符串劈分操作

s1 = 'hello world python'
print(s1.split())
s2 = 'hello|world|python'
print(s2.split(sep='|'))
print(s2.split(sep='|',maxsplit=1))
# ['hello', 'world', 'python']
# ['hello', 'world', 'python']
# ['hello', 'world|python']

5、判断字符串操作

6、字符串的替换与合并

s = 'hello,python,python,python'
print(s.replace('python','java'))
print(s.replace('python','java',2))
# hello,java,java,java
# hello,java,java,python
lst = ['hello','java','python']
print("|".join(lst))
print('/'.join(lst))
t = ('hello','java','python')
print(" ".join(t))
print('@'.join('python'))
# hello|java|python
# hello/java/python
# hello java python
#p@y@t@h@o@n

 三、字符串的比较操作

运算符:>,>=,<,<=,==,!=

比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较。

比较原理:两上字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符。

四、字符串的切片操作

字符串是不可变类型,与列表切片的异同:

  • :不具备增、删、改等操作
  • :切片操作将产生新的对象

具体细节在之前写的列表基础文章中有介绍,找到列表切片即可,以下是文章链接: 
python学习 --- 列表基础_wo-yu的博客-CSDN博客列表的创建,列表的特点,获取列表中元素,切片,列表元素的查询和遍历,列表元素的增删改,列表的排序,列表生成式https://blog.csdn.net/qq_61768389/article/details/128664704?spm=1001.2014.3001.5501

五、格式化字符串

1、%作为占位符

 

name = '恶习之龙'
degree = 1
print('副本%s,难度%d级' % (name,degree))
#副本恶习之龙,难度1级

这个方式的写法其实与C有些类似

 

2、{}作为占位符

0,1是索引

name = '恶习之龙'
degree = 1
print('这是副本{0},难度{1}级,真的是{0}'.format(name,degree))
#这是副本恶习之龙,难度1级,真的是恶习之龙

3、f-string

name = '恶习之龙'
degree = 1
print(f'这是副本{name},难度{degree}级!')
#这是副本恶习之龙,难度1级!

六、字符串的编码转换

1、为什么需要字符串的编码转换?

2、编码与解码的方式

编码:将字符串转换为二进制数据(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'))
# b'\xb6\xf1\xcf\xb0\xd6\xae\xc1\xfa'
# b'\xe6\x81\xb6\xe4\xb9\xa0\xe4\xb9\x8b\xe9\xbe\x99'
# 恶习之龙

 ---------------------------------------------------------结束-----------------------------------------------------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值