?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__之前創建對象