Python中创建的不可变的对象(如int和str)创建出来后就不会再改变,为了性能优化,Python使用同一个对象来表示具有相同内容的字符串。例如创建两个相同的字符串变量:
>>> s1 = "test"
>>> s2 = "test"
>>> id(s1)
4337183936
>>> id(s2)
4337183936
可以看到s1和s2在内存中的标示id是同一个。
处理字符串的函数
len函数返回一个字符串中字符的个数
max函数返回字符串中的最大字符
min函数返回字符串中最小字符
字符串下标运算符:[]
字符串是一个字符序列,可以通过下标(从0开始)访问字符串中的一个字符:
s[index]
注意:1、s[-1] = s[-1 + len(s)],表示字符串的最后一个字符。2、字符串是不可变的,不能通过下标去尝试修改字符串中的一个字符。
字符串截取符:[Start: end]
截取从start到end-1部分的字符串,start为空表示0,end为空表示最后一个下标,如果start或end是负数,那么就用len(s)+负数来替换下标。如下例子:
>>> s = "welcome"
>>> s[: 6]
'welcom'
>>> s[3:]
'come'
>>> s[1:-1] #等于s[1: -1+len(s)] = s[1: 6]
'elcom'
字符串连接符:+、字符串复制符:*
>>> s1="a"
>>> s2="b"
>>> s1+s2
'ab'
>>> 3*s1
'aaa'
字符串包含某个字符串判断:in、not in
>>> s = "welcome"
>>> "come" in s
True
>>> "come" not in s
False
比较字符串
可以使用==、!=、 >、 <、 >=、 <=来比较字符串,Python是比较字符串中从脚标0开始依次向右对应位置的字符进行大小比较的。
迭代字符串
字符串是可迭代的,这意味着可以使用for循环来遍历字符串中的每一个字符,例如:
for ch in s:
print(ch)
或遍历奇数位
for i in range(0, len(s), 2):
print(s[i])
测试字符串类型常用函数:
isalnum(): bool #字符串中至少有一个字符,并且是字母和数字组成就返回true
isalpha(): bool #字符串中至少有一个字符,并且是字母组成就返回true
isdigit(): bool #字符串只含有数字就返回true
isidentifier():bool #字符串是Python标示符就返回true
islower(): bool #字符串中至少有一个字符,并全是小写就返回true
isupper(): bool #字符串中至少有一个字符,并全是大写就返回true
isspace(): bool #字符串中只包含空格就返回true
搜索字符串:
endswith(s1: str): bool #如果字符串以子串s1结尾则返回true
startswith(s1: str): bool #如果字符串以子串s1开头则返回true
find(s1): int #返回s1在这个字符串的最低下标,如果不存在返回-1
rfind(s1): int #返回s1在这个字符串的最高下标,如果不存在返回-1
count(substring): int #返回这个子串在字符串中出现的次数
转换字符串:
capitalize(): str #返回大写首字母的字符串
lower(): str #将字母都变成小写
upper(): str #将字母都变成大写
title(): str #大写每个单词的首字母
swapcase(): str #将小写字母变成大写,大写字母变成小写
replace(old, new): str #用新的字符串替代老的字符串
⚠️:这里的转换都是创建了一个新的字符串,因为字符串是不可变的。原来的字符串内容没有变化。
删除字符串两端的空格(包括‘’、\t、\f、\r、\n):
lstrip(): str #去掉字符串前端的空白字符串
rstrip(): str #去掉字符串后端的空白字符串
strip(): str #去掉字符串两端的空白字符串
格式化字符串:
center(width): str #返回在给定宽度上居中的字符串副本
ljust(width): str #返回在给定宽度上居左的字符串副本
rjust(width): str #返回在给定宽度上居右的字符串副本
运算符重载:
Python中的运算符重载思想比较简单,你只需要在你需要重载的地方重写和运算符对应的方法即可。这里提供和运算符对应的方法:
⚠️方法前后都是双下划线
__init__ 构造函数 对象建立:X = Class(args)
__del__ 析构函数 X对象收回
__add__ 运算符+ 如果没有_iadd_,X+Y,X+=Y
__or__ 运算符|(位OR) 如果没有_ior_,X|Y,X|=Y
__repr__,__str__ 打印、转换 print(X)、repr(X),str(X)
__call__ 函数调用 X(*args,**kargs)
__getattr__ 点号运算 X.undefined
__setattr__ 属性赋值语句 X.any = value
__delattr__ 属性删除 del X.any
__getattribute__ 属性获取 X.any
__getitem__ 索引运算 X[key],X[i:j],没__iter__时的for循环和其他迭代器
__setitem__ 索引赋值语句 X[key] = value,X[i:j] = sequence
__delitem__ 索引和分片删除 del X[key],del X[i:j]
__len__ 长度 len(X),如果没有__bool__,真值测试
__bool__ 布尔测试 bool(X),真测试
__lt__,__gt__, 特定的比较 X < Y,X > Y
__le__,__ge__, X<=Y,X >= Y
__eq__,__ne__ X == Y,X != Y
__radd__ 右侧加法 Other+X
__iadd__ 实地(增强的)加法 X += Y (or else __add__)
__iter__,__next__ 迭代环境 I = iter(X),next(I)
__contains__ 成员关系测试 item in X (任何可迭代的)
__index__ 整数值 hex(X),bin(X),oct(X),O[X],O[X:]
__enter__,__exit__ 环境管理器 with obj as var:
__get__,__set__ 描述符属性 X.attr,X.attr = value,del X.attr
__new__ 创建 在__init__之前创建对象