?Python中創(chuàng)建的不可變的對(duì)象(如int和str)創(chuàng)建出來(lái)后就不會(huì)再改變其屏,為了性能優(yōu)化,Python使用同一個(gè)對(duì)象來(lái)表示具有相同內(nèi)容的字符串缨该。例如創(chuàng)建兩個(gè)相同的字符串變量:
>>> s1 = "test"
>>> s2 = "test"
>>> id(s1)
4337183936
>>> id(s2)
4337183936
可以看到s1和s2在內(nèi)存中的標(biāo)示id是同一個(gè)偎行。
處理字符串的函數(shù)
len函數(shù)返回一個(gè)字符串中字符的個(gè)數(shù)
max函數(shù)返回字符串中的最大字符
min函數(shù)返回字符串中最小字符
字符串下標(biāo)運(yùn)算符:[]
字符串是一個(gè)字符序列,可以通過(guò)下標(biāo)(從0開(kāi)始)訪問(wèn)字符串中的一個(gè)字符:
s[index]
注意:1贰拿、s[-1] = s[-1 + len(s)],表示字符串的最后一個(gè)字符蛤袒。2、字符串是不可變的膨更,不能通過(guò)下標(biāo)去嘗試修改字符串中的一個(gè)字符妙真。
字符串截取符:[Start: end]
截取從start到end-1部分的字符串,start為空表示0荚守,end為空表示最后一個(gè)下標(biāo),如果start或end是負(fù)數(shù)珍德,那么就用len(s)+負(fù)數(shù)來(lái)替換下標(biāo)练般。如下例子:
>>> s = "welcome"
>>> s[: 6]
'welcom'
>>> s[3:]
'come'
>>> s[1:-1] ? #等于s[1: -1+len(s)] = s[1: 6]
'elcom'
字符串連接符:+、字符串復(fù)制符:*
>>> s1="a"
>>> s2="b"
>>> s1+s2
'ab'
>>> 3*s1
'aaa'
字符串包含某個(gè)字符串判斷:in锈候、not in
>>> s = "welcome"
>>> "come" in s
True
>>> "come" not in s
False
比較字符串
可以使用==薄料、!=、 >泵琳、 <摄职、 >=、 <=來(lái)比較字符串获列,Python是比較字符串中從腳標(biāo)0開(kāi)始依次向右對(duì)應(yīng)位置的字符進(jìn)行大小比較的谷市。
迭代字符串
字符串是可迭代的,這意味著可以使用for循環(huán)來(lái)遍歷字符串中的每一個(gè)字符蛛倦,例如:
for ch in s:
? ? print(ch)
或遍歷奇數(shù)位
for i in range(0, len(s), 2):
? ? print(s[i])
測(cè)試字符串類型常用函數(shù):
isalnum(): bool ? ? ? ?#字符串中至少有一個(gè)字符歌懒,并且是字母和數(shù)字組成就返回true?
isalpha(): bool ? ? ? ? #字符串中至少有一個(gè)字符,并且是字母組成就返回true
isdigit(): bool ? ? ? ? ? #字符串只含有數(shù)字就返回true
isidentifier():bool ? ?#字符串是Python標(biāo)示符就返回true
islower(): bool ? ? ? ? #字符串中至少有一個(gè)字符溯壶,并全是小寫(xiě)就返回true
isupper(): bool ? ? ? ?#字符串中至少有一個(gè)字符及皂,并全是大寫(xiě)就返回true
isspace(): bool ? ? ? ?#字符串中只包含空格就返回true
搜索字符串:
endswith(s1: str): bool ? ? ?#如果字符串以子串s1結(jié)尾則返回true
startswith(s1: str): bool ? ? #如果字符串以子串s1開(kāi)頭則返回true
find(s1): int ? ? ? ? ? ? ? ? ? ? ? ? #返回s1在這個(gè)字符串的最低下標(biāo),如果不存在返回-1
rfind(s1): int ? ? ? ? ? ? ? ? ? ? ? ?#返回s1在這個(gè)字符串的最高下標(biāo)且改,如果不存在返回-1
count(substring): int ? ? ? ? #返回這個(gè)子串在字符串中出現(xiàn)的次數(shù)
轉(zhuǎn)換字符串:
capitalize(): str ?#返回大寫(xiě)首字母的字符串
lower(): str ?#將字母都變成小寫(xiě)
upper(): str? #將字母都變成大寫(xiě)
title(): str ?#大寫(xiě)每個(gè)單詞的首字母
swapcase(): str ?#將小寫(xiě)字母變成大寫(xiě)验烧,大寫(xiě)字母變成小寫(xiě)
replace(old, new): str ?#用新的字符串替代老的字符串
??:這里的轉(zhuǎn)換都是創(chuàng)建了一個(gè)新的字符串,因?yàn)樽址遣豢勺兊挠瞩恕T瓉?lái)的字符串內(nèi)容沒(méi)有變化碍拆。
刪除字符串兩端的空格(包括‘’、\t慨蓝、\f感混、\r、\n):
lstrip(): str ? #去掉字符串前端的空白字符串
rstrip(): str? #去掉字符串后端的空白字符串
strip(): str? #去掉字符串兩端的空白字符串
格式化字符串:
center(width): str ?#返回在給定寬度上居中的字符串副本
ljust(width): str? #返回在給定寬度上居左的字符串副本
rjust(width): str? #返回在給定寬度上居右的字符串副本
運(yùn)算符重載:
Python中的運(yùn)算符重載思想比較簡(jiǎn)單礼烈,你只需要在你需要重載的地方重寫(xiě)和運(yùn)算符對(duì)應(yīng)的方法即可弧满。這里提供和運(yùn)算符對(duì)應(yīng)的方法:
??方法前后都是雙下劃線
__init__ 構(gòu)造函數(shù) 對(duì)象建立:X = Class(args)
__del__ 析構(gòu)函數(shù) X對(duì)象收回
__add__ 運(yùn)算符+ 如果沒(méi)有_iadd_,X+Y,X+=Y
__or__ 運(yùn)算符|(位OR) 如果沒(méi)有_ior_,X|Y,X|=Y
__repr__,__str__ 打印、轉(zhuǎn)換 print(X)此熬、repr(X),str(X)
__call__ 函數(shù)調(diào)用 X(*args,**kargs)
__getattr__ 點(diǎn)號(hào)運(yùn)算 X.undefined
__setattr__ 屬性賦值語(yǔ)句 X.any = value
__delattr__ 屬性刪除 del X.any
__getattribute__ 屬性獲取 X.any
__getitem__ 索引運(yùn)算 X[key],X[i:j],沒(méi)__iter__時(shí)的for循環(huán)和其他迭代器
__setitem__ 索引賦值語(yǔ)句 X[key] = value,X[i:j] = sequence
__delitem__ 索引和分片刪除 del X[key],del X[i:j]
__len__ 長(zhǎng)度 len(X),如果沒(méi)有__bool__,真值測(cè)試
__bool__ 布爾測(cè)試 bool(X),真測(cè)試
__lt__,__gt__, 特定的比較 X < Y,X > Y
__le__,__ge__, X<=Y,X >= Y
__eq__,__ne__ X == Y,X != Y
__radd__ 右側(cè)加法 Other+X
__iadd__ 實(shí)地(增強(qiáng)的)加法 X += Y (or else __add__)
__iter__,__next__ 迭代環(huán)境 I = iter(X),next(I)
__contains__ 成員關(guān)系測(cè)試 item in X (任何可迭代的)
__index__ 整數(shù)值 hex(X),bin(X),oct(X),O[X],O[X:]
__enter__,__exit__ 環(huán)境管理器 with obj as var:
__get__,__set__ 描述符屬性 X.attr,X.attr = value,del X.attr
__new__ 創(chuàng)建 在__init__之前創(chuàng)建對(duì)象