python-字符串(驻留机制、常用操作、格式化字符串、编码与解码)

本文是作者学习Python的笔记,主要介绍了Python中字符串的相关知识。包括字符串是基本数据类型及驻留机制,阐述了驻留机制的情况、优缺点;还介绍了字符串的常用操作,如查询、大小写转换等,以及格式化字符串和编码转换等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人简介 

  • 大家好,我是韩慧腾。一名正在努力学python的大一小白,本文章为初学的笔记,希望各位多多指教。💙
  • 欢迎点赞+收藏+留言💜
  • 越来越喜欢简单的事和乐观的人🧡

一、字符串

概述:不同于其他语言在python中字符串是基本数据类型,是一个不可变的字符序列(之前学过的元组也是不可变序列),定义时候可以用单引号、双引号、三引号。

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

 驻留机制的几种情况(交互模式,pycharm对驻留机制进行了优化):

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

字符串驻留机制的优缺点:

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

二、字符串的常用操作

  • 字符串的查询操作

# @Author:韩慧腾
# @Time :2022/7/3 15:11
# @File :str_Demo2.py
# 努力已经来不及了,你得拼命
#字符串的查询操作
s='python python'
#查找某字串第一次出现的位置
print(s.index('th')) #2
print(s.find('th')) #2
#查找某字串最后一次出现的位置
print(s.rindex('th')) #9
print(s.rfind('th')) #9
#如果查找不存在的元素时,index会抛出异常,而find则返回-1
  • 字符串的大小写转换操作

# @Author:韩慧腾
# @Time :2022/7/3 15:10
# @File :str_Demo3.py
# 努力已经来不及了,你得拼命
#大小写转换操作
s='python'
print(id(s)) #1655299933040
s1=s.upper()#字符串是不可变的,因此操作后会生成一个新的字符串对象
print(s1,id(s1)) #PYTHON 1655299933424
s2=s1.lower()
print(s2,id(s2))#python 2763904372208
#大写变小写 小写变大写
s3='PYTHON,java'
s4=s3.swapcase()
print(s4)#python,JAVA
s5='never give up'
s6=s5.title()
print(s6)#Never Give Up
  •  字符串内容对齐操作

  

# @Author:韩慧腾
# @Time :2022/7/4 22:06
# @File :str_Demo4.py
# 努力已经来不及了,你得拼命
s='人生苦短,我用python'
s1=s.center(21,'*')
print(s1)#****人生苦短,我用python****
s2=s.ljust(21,'*')
print(s2)#人生苦短,我用python********
s3=s.rjust(21,'*')
print(s3)#********人生苦短,我用python
s4=s.zfill(21)
print(s4)#00000000人生苦短,我用python
  •  字符串的劈分操作

# @Author:韩慧腾
# @Time :2022/7/4 22:30
# @File :str_Demo5.py
# 努力已经来不及了,你得拼命
s1='PHP JAVA PYTHON'
s2=s1.split()#默认以空格作为分界线,返回值是一个列表
print(s2)#['PHP', 'JAVA', 'PYTHON']
s3='PHP,JAVA,PYTHON'
s4=s3.split(',')
print(s4)#['PHP', 'JAVA', 'PYTHON']
print(s3.split(',',1))#['PHP', 'JAVA,PYTHON'] 第二个参数是最大劈分次数
#右侧劈分rsplit()方法
s5='PHP JAVA PYTHON'
print(s5.rsplit())#['PHP', 'JAVA', 'PYTHON']
s6='PHP,JAVA,PYTHON'
print(s6.split(','))#['PHP', 'JAVA', 'PYTHON']
print(s6.spilt(',',1))#['PHP', 'JAVA', 'PYTHON']

提醒:左分割和右分割只是对于有第二个参数(最大分劈次数)时候有区别,其余情况实则分出来的是一样的。

  • 判断字符串操作的方法

        

# @Author:韩慧腾
# @Time :2022/7/5 17:59
# @File :str_Demo6.py
# 努力已经来不及了,你得拼命
s='never give up'
print(s.isidentifier())#False 判断该字符串是否为合法标识符
print('奈雪'.isidentifier())#True 标识符是可以包含汉字的
print('\t'.isspace())#True 用于判断字符串是否全部由空白字符组成
print('hello '.isspace())#False
print('hello哈哈哈'.isalpha())#True 用于判断字符串是否全部由字母组成
print('123'.isdecimal())#True 用于判断字符串是否全部由十进制数字组成
print('12'.isdecimal())#True
print('哈哈哈哈'.isdecimal())#False
print('12'.isnumeric())#True 用于判断字符串是否全部由数字组成
print('一二三四1234'.isnumeric())#True 说明一二三也是数字
print('123asd'.isalnum())#True 用于判断字符串是否由数字和字母组成
print('12哈啊哈'.isalnum())#True 说明在python中汉字也属于是字母
print('123.sdf'.isalnum())#False
  •  字符串操作的其他方法

# @Author:韩慧腾
# @Time :2022/7/6 18:02
# @File :str_Demo7.py
# 努力已经来不及了,你得拼命
s1='hello,Java'
s2=s1.replace('Java','python')#就是把字符串的Java替换成python
print(s2)#hello,python
s3='hello,java,java,java'
s4=s3.replace('java','python',2)#第三个参数是替换的最大个数
print(s4)#hello,python,python,java
#join方法是把列表或元组中的字符串元素合并成一个字符串
l=['Java','python','python']
print('.'.join(l))#Java.python.python
print(''.join(l))#Javapythonpython
t=('Java','python','python')
print(''.join(t))#Javapythonpython
print('|'.join(t))#Java|python|python
#join方法对于字符串
print('*'.join('python'))#p*y*t*h*o*n
  • 字符串的比较操作

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

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

# @Author:韩慧腾
# @Time :2022/7/6 19:42
# @File :str_Demo8.py
# 努力已经来不及了,你得拼命
#字符串的比较
print('h'>'k')#False
print('happy'>'key')#False 其实只要是k开头的字符串都大于h开头的字符串
#查看一下原始值
print(ord('h'),ord('k'))#104 107
print(chr(97),chr(98))#a b

'=='与'is'的区别:'=='比较的是value(值),is比较的是id是否相等

  • 字符串的切片操作

由于字符串是不可变类型,不具备增删改等操作,因此切片操作将产生新的对象。

# @Author:韩慧腾
# @Time :2022/7/6 23:15
# @File :str_Demo9.py
# 努力已经来不及了,你得拼命
s='hello,python'
print(s[::2])#hlopto 第一个参数是开始,默认为第一个元素,第二个参数是结束位置,默认到字符串最后,第三个元素是步长

 三、格式化字符串

# @Author:韩慧腾
# @Time :2022/7/7 9:43
# @File :str_Demo10.py
# 努力已经来不及了,你得拼命
#格式化字符串的三种方式
name='张三'
a=str(name)
age=13
b=str(age)
sex='男'
#学格式化之前我们的操作
print('我是'+a+',我今年'+b+'岁')#我是张三,我今年13岁
#学格式化之后的操作
print('我是%s,今年%i岁,我是%s生'%(name,age,sex))#我是张三,今年13岁,我是男生
print('----------------------')
print('我是{0},我今年{1}岁'.format(name,age))#我是张三,我今年13岁
print(f'我是{name},我今年{age}岁')#我是张三,我今年13岁
# @Author:韩慧腾
# @Time :2022/7/7 10:08
# @File :str_Demo11.py
# 努力已经来不及了,你得拼命
print('%d'%100)#100
print('%10d'%100)#       100 此处的10表示的是宽度
print('%.3f'%3.1345)# 3.135意思为保留三位小数
print('{0:.3}'.format(3.1415926))#3.14 .3表示的是一共是三位数
print('{:.3f}'.format(3.1415926))#3.142 .3f表示的是3位小数
print('{:10.3f}'.format(3.1415926))#     3.142 同时设置宽度和精度,共是10位,3位是小数

四、字符串的编码转换

 编码:将字符串转换为二进制数据(bytes)

解码:将bytes类型的数据转换成字符串类型

# @Author:韩慧腾
# @Time :2022/7/7 11:33
# @File :str_Demo12.py
# 努力已经来不及了,你得拼命
s='奈雪的茶'
#编码
print(s.encode('GBK'))#b'\xc4\xce\xd1\xa9\xb5\xc4\xb2\xe8' 一个中文占两个字节
#解码
a=s.encode('GBK')
print(a.decode('GBK'))#奈雪的茶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨四点半sec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值