花了2萬多買的Python教程全套,現(xiàn)在分享給大家,入門到精通(Python全棧

#思凡的筆記——Python
Last Update Date:2023-8-9
更新至:89P
前言:爭取簡約而精確,歡迎大家借鑒、監(jiān)督,共同進(jìn)步
- Note1:該筆記為自用,按照自己的理解做了精簡,沒有太多解釋性語言,需要配合視頻使用;本人是英語專業(yè)大四學(xué)生,實習(xí)工作之余學(xué)習(xí)Python,更新也許會比較慢但不會放棄的!
- Note2:最近在忙畢業(yè)論文中期答辯的事,每天工作之余要寫論文,Python的學(xué)習(xí)需要推后一陣了(5.15左右)。大家要堅持學(xué)哦,我們頂峰相見。
- Note3:哈嘍,不知道有沒有今年上半年就關(guān)注了我的筆記的朋友,會偶然回看這篇已經(jīng)“停更”三個月的筆記,這段話是寫給你們的。停更這么久,是因為我畢業(yè)之后一直在找工作,因為不想從事英語相關(guān)職業(yè),就報了線下班在學(xué)習(xí)前端。所以,一是一周六天的課程和晚自習(xí)使我的時間精力難以繼續(xù)學(xué)習(xí)和更新Python(雖然這個理由對于想學(xué)習(xí)的人來說只是借口),二是決定要學(xué)前端之后,Python的知識就變得不那么重要了,我就失去了再學(xué)下去的動力。感謝一些網(wǎng)友對我的私信催促或者幾句關(guān)心,我也對一些力所能及的提問做了回復(fù)。希望僅存的這些拙作/筆記能夠在有限的范圍內(nèi)最大程度的幫助到大家,哈哈也許哪天我還是想重拾Python就學(xué)完了把筆記也補完了。最后,希望大家能夠想清楚自己想要的,堅持下去,每一個上進(jìn)的人都是可敬的。
print()函數(shù)
輸出:
①數(shù)字
②字符串(加引號)
③含運算符的表達(dá)式
轉(zhuǎn)義字符
反斜杠+想要實現(xiàn)的轉(zhuǎn)義功能首字母
①換行:\n (newline)
②回車:\r (return)
③水平制表符:\t (tab)——在不使用表格的情況下在垂直方向按列對齊文本。每8個字符可以看作一個水平制表符,如果遇到 \t 之前未滿8個字符,則 \t 就補空格直到滿8個
④退格:\b (backspace)
⑤原字符:r...(row)
常見的數(shù)據(jù)類型
1.整數(shù)類型-int (integer)-正數(shù)、負(fù)數(shù)和零
(十進(jìn)制——默認(rèn);
二進(jìn)制——以0b開頭;
八進(jìn)制——以0o開頭;
十六進(jìn)制——以0x開頭)
2.浮點數(shù)類型-float-整數(shù)、小數(shù)
3.布爾類型-bool-True, False
4.字符串類型-str (string)
運算符

一、算術(shù)運算符
1.標(biāo)準(zhǔn)算術(shù)運算符
加+、減-、乘*、除/、整除//(向下取整)
2.取余運算符
%(9%4=1)
3.冪運算符
**(2**3=23)
二、賦值運算符
1.=
支持鏈?zhǔn)劫x值(執(zhí)行順序:右到左)
支持系列解包賦值(a,b,c=10,20,30)
支持參數(shù)賦值(+=,-=,*=,/=,//=,%=)
三、比較運算符
1.<,>,<=,>=,!=
2.==
對象value的比較
3.is, is not
對象id的比較
四、布爾運算符
- and, or, not, in,
五、位運算符
選擇結(jié)構(gòu)

一、單分支結(jié)構(gòu)
中文語義:如果……就……
語法結(jié)構(gòu):if?條件表達(dá)式:
??????????? 條件執(zhí)行體
money=1000
s=int(input('請輸入取款金額'))
if money>=s:
??money=money-s
??print('取款成功,余額為:',money)
else:
???print('取款失敗,余額不足')
二、雙分支結(jié)構(gòu)
中文語義:如果…不滿足…就
語法結(jié)構(gòu):if?條件表達(dá)式:
??????????? 條件執(zhí)行體1
???????? ?else:
??????????? 條件執(zhí)行體2
三、多分支結(jié)構(gòu)
- 中文語義:……是……? 不是
????????? ……是……? 不是
????????? ……是……???不是
???????? ?……是……??是
- 語法結(jié)構(gòu):
if??條件表達(dá)式1:
???條件執(zhí)行體1
elif 條件表達(dá)式2:
???條件執(zhí)行體2
elif 條件表達(dá)式N:
???條件執(zhí)行體N
else:
???條件執(zhí)行體N+1
score=float(input('請輸入一個成績'))
if score>=90 and score<=100:
??print('A')
elif score>=80 and score<90:
??print ('B')
elif score>=70 and score<80:
??print('C')
elif score>=60 and score<70:
??print('D')
elif score>=0 and score<60:
??print('E')
else:
??print('成績輸入有誤')
四、嵌套if的使用
- 語法結(jié)構(gòu):
if 條件表達(dá)式1:
??if 內(nèi)層條件表達(dá)式:
???內(nèi)存條件執(zhí)行體1
??else:
???內(nèi)存條件執(zhí)行體2
else:
??條件執(zhí)行體
print('付款規(guī)則:'
???'會員購物金額200元及以上打八折,100元至200元打九折,低于100元不打折;'
???'非會員購物金額200元及以上打九五折,低于200元不打折')
answer=input('您是會員嗎?(是/否)')
money=float(input('請輸入您的購物金額:'))
if answer=='是':
??if money>=200:
?????print('打8折,付款金額為:',money*0.8)
??elif money>=100:
????print('打9折,付款金額為:',money*0.9)
??elif money<=0:
????print('金額輸入錯誤')
??else:
????print('不打折,付款金額為:',money)
else:
??if money>=200:
????print('打9.5折,付款金額為:',money*0.95)
??elif money <= 0:
????print('金額輸入錯誤')
??else:
????print('不打折,付款金額為',money)
五、Pass語句
- 語句什么都不做,只是一個占位符,用在需要語句的地方
- 配套使用:
- if 語句的條件執(zhí)行體
- for--in語句的循環(huán)體
- 定義函數(shù)的函數(shù)體
循環(huán)結(jié)構(gòu)

一、range函數(shù)的使用
- 創(chuàng)建range()的三種方式
1.range(stop)——創(chuàng)建一個以[0,stop)之間的整數(shù)序列,步長為1
r=range(10)
print(list(r))?
2.range(start, stop)——創(chuàng)建一個(start, stop)之間的整數(shù)序列,步長為1
r=range(1, 10)
print(list(r))?
3.range(start, stop, step)——創(chuàng)建一個(start, stop)之間的整數(shù)序列,步長為step
r=range(1,10,2)
print(list(r))
二、while循環(huán)
- 語法結(jié)構(gòu):?
while 條件表達(dá)式
????? 條件執(zhí)行體(循環(huán)體)
- 四步循環(huán)法
①初始化變量
②條件判斷
③條件執(zhí)行體(循環(huán)體)
④改變變量
#計算0--4之間的累加和
sum=0?#初始變量為0
a=0?#條件判斷
while a<5:?#條件執(zhí)行體(循環(huán)體)
??sum+=a?#改變變量
??a+=1
print('和為',sum)
#1--100的偶數(shù)和
a=1
sum=0
while a<=100:
??if?a%2==0:
????sum+=a
??a+=1
print('1到100間偶數(shù)之和為',sum)
三、for_in循環(huán)
- in 表達(dá)從(字符串、序列等)中依次取值,又稱遍歷
- for--in 遍歷的對象必須是可迭代對象
- 語法結(jié)構(gòu):
for 自定義的變量 in 可迭代對象
??? 循環(huán)體
#使用for循環(huán),計算1到100之間的偶數(shù)和
sum=0
for item in range(1,101):
???if item%2==0:
?????sum+=item
print(sum)
#100到999的水仙花數(shù)
for n in range(100,1000):
??sum=0
??for i in str(n):
????sum=sum+int(i)**3
??if sum==n:
????print(n)
四、流程控制語句break
非正常結(jié)束循環(huán)
for item in range(3):
??pwd=input('請輸入密碼:')
??if?pwd=='8888':
????print('密碼正確')
????break
??else:
????print('密碼不正確')
五、流程控制語句continue
用于結(jié)束當(dāng)前循環(huán),進(jìn)入下一次循環(huán),通常與分支結(jié)構(gòu)的if一起使用
#輸出1-50之間所有5的倍數(shù)
#使用for_in語句
for item in range(1,51):
??if item%5==0:
????print(item)
#使用continue語句
for item in range(1,51):
??if item%5!=0:
????continue
??print(item)
六、eles語句
①if else ——if 條件不成立,執(zhí)行else
②while else—— 沒有碰到break,執(zhí)行else
③for else —— 沒有碰到break,執(zhí)行else
for item in range(3):
??pwd=input('請輸入密碼')
??if pwd=='8888':
????print('密碼正確')
????break
??else:
????print('密碼不正確')
else:
??print('對不起,三次密碼均輸入錯誤')
a=0
while a<3:
??pwd = input('請輸入密碼')
??if pwd == '8888':
????print('密碼正確')
????break
??else:
????print('密碼不正確')
??a+=1
else:
??print('對不起,三次密碼均輸入錯誤')
七、嵌套循環(huán)
循環(huán)結(jié)構(gòu)中又嵌套了另外的完整循環(huán)結(jié)構(gòu),其中內(nèi)層循環(huán)做為外層循環(huán)的循環(huán)體執(zhí)行
#輸出一個三行四列的矩形
for i in range(1,4): #行數(shù),執(zhí)行三次,一次一行
??for j in range(1,5):
????print('*',end='\t') #末尾換行改為水平制表符,避免換行
??print()?#打行
*9*9乘法表
for i in range(1,10): #行數(shù)
??for j in range(1,i+1):
????print(j,'*',i,'=',i*j,end='\t')
??print()
八、二重循環(huán)中的break和continue
用于控制本層循環(huán)
for i in range(5):
??for j in range(1,11):
????if j%2==0:
??????continue #從step1重新開始循環(huán)
????print(j,end='\t')
??print()
列表


一、列表對象的創(chuàng)建
- 方法一:[ ]
lst1=['hello','world',98]
- 方法二:使用內(nèi)置函數(shù)list
lst2=list(['hello','world',98])
- 列表特點
①列表元素按順序有序排序
lst=['hello','world',98]
print(lst)
②索引映射唯一個數(shù)據(jù)
lst=['hello','world',98]
print(lst[0],lst[-3])
③列表可以存儲重復(fù)數(shù)據(jù)
lst=['hello','world',98,'hello']
print(lst[0],lst[-4])
二、列表的查詢操作
1.獲取列表中指定元素的索引——index()
- 如查列表中存在N個相同元素,只返回相同元素中的第一個元素的指引
- 如果查詢的元素不在列表中,會拋出ValueError
- 可以在指定的start和stop之間查找
lst=['hello','world',98,'hello']
print(lst.index('hello',0,4))
2.獲取單個元素
- 正向索引從0到N-1
- 逆向索引從-N到-1
- 指定索引不存在,拋出IndexError
3.獲取多個元素
- 語法結(jié)構(gòu):
列表名[start:stop:step]

4.列表元素的判斷及遍歷
①判斷-語法結(jié)構(gòu):
元素 in/not in 列表名
lst=[10,20,'python','hello']
print(10 in lst)
print(100 in lst)
print(10 not in lst)
②遍歷-語法結(jié)構(gòu):
for 迭代變量 in 列表名
for item in lst:
??print(item)
三、列表元素的增加
1.append()
在列表的末尾添加一個元素
lst=[10,20,30]
print('添加元素之前',lst,id(lst))
lst.append(100)
print('添加元素之后',lst,id(lst))
2.extend()
在列表的末尾至少添加一個元素
lst2=['hello','world']
lst.extend(lst)
print(lst)
3.insert()
在列表的任意位置添加一個元素
lst.insert(1,90)
print(lst)
4.切片
在列表的任意位置至少添加一個元素
lst3=[True,False,'hello']
lst[1:]=lst3
print(lst)
四、列表元素的刪除
1.remove()
一次刪除一個元素,重復(fù)元素只刪除第一個
lst=[10,20,30,40,50,60,30]
lst.remove(30)
print(lst)
2.pop()
刪除一個指定索引位置上的元素,不指定索引則刪除列表最后一個元素
lst.pop(1)
print(lst)
3.切片
一次至少刪除一個元素(會產(chǎn)生一個新的列表對象)
new_list=lst[1:3]
print('原列表',lst)
print('切片后的列表',new_list)
4.clear()
清空列表
lst.clear()
print(lst)
5.del
刪除列表
del lst
五、列表元素的修改
1.為指定索引的元素賦予一個新值
lst=[10,20,30,40]
lst[2]=100
print(lst)
2.為指定的切片賦予一個新值
lst[1:3]=[300,400,500,600]
print(lst)
六、列表元素的排序
1.方法一:調(diào)用sort(),列中所有元素默認(rèn)按照從小到大順序(升序)排序,可以指定reverse=True進(jìn)行降序排序
lst=[20,40,10,98,54]
print('排序前的列表',lst)
#開始排序,默認(rèn)升序
lst.sort()
print('排序后的列表',lst,id(lst))
#通過指定關(guān)鍵字參數(shù),將列表元素降序排序
lst.sort(reverse=True) #T:降序;F:升序
print(lst)??
2.方法二:調(diào)用內(nèi)置函數(shù)sorted(),可以指定reverse=True進(jìn)行降序排序。該方法會產(chǎn)生新的列表對象,原列表不變
lst=[20,40,10,98,54]
print('原列表',lst)
#開始排序,默認(rèn)升序
new_list=sorted(lst)
print(lst)
print(new_list)
#通過指定關(guān)鍵字參數(shù),將列表元素降序排序
desc_list=sorted(lst,reverse=True)
print(desc_list)
七、列表生成式
- 語法格式:
[i*i for i in range(1,10)]
(i*i→表示列元素的表達(dá)式
i→自定義變量
range(1,10)→可迭代對象)
lst=[i*2 for i in range(1,11)]
print(lst)
#輸出[2,4,6,8,10]
字典

- 內(nèi)置數(shù)據(jù)結(jié)構(gòu)之一,與列表同屬可變序列;
- 以鍵值對的方式存儲數(shù)據(jù),字典是無序序列
一、字典基礎(chǔ)操作
1.字典的創(chuàng)建
①大括號{}
scores={'張三':100,'李四':98,'王五':45}
②內(nèi)置函數(shù)dict()
scores=dict(name='jack',age=20)
2.字典中元素的獲取
①[]
scores['張三']
print(scores['張三'])
(元素不存在將報錯)
②get()
scores.get('張三')
print(scores.get('張三'))
(元素不存在將輸出None)
3.key的判斷
①in
print('張三' in scores)
②not in
print('張三' not in scores)
4.字典元素的新增/修改
scores['Jack']=90
5.字典元素的刪除
del scores['張三']
二、獲取字典視圖
1.keys()
- 獲取字典中所有key
keys=scores.keys()
print(keys)
print(type(keys))
print(list(keys))
2.values()
- 獲取字典中所有value
values=scores.values()
print(values)
print(type(values))
print(list(values))
3.items()
- 獲取字典中所有key,value對
items=scores.items()
print(items)
print(list(items))
三、字典元素的遍歷
- for item in scores:
print(item)
scores={'張三':100,'李四':98,'王五':45}
for item in scores:
??print(item,scores[item],scores.get(item))
四、字典生成式
- 內(nèi)置函數(shù)zip()?
- item.upper(): price for item,price in zip(items,prices)
items=['Fruits','Book','Others']
prices=[96,78,85]
d={item. upper():price for item, price in zip(items,prices)}
print(d)
元組

- Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,是一個不可變數(shù)列
一、元組創(chuàng)建方式
1.小括號()
t1=('Python','world',98)
print(t1)
print(type(t1))
2.內(nèi)置函數(shù)tuple()
t2=tuple(('Python','world',98))
print(t2)
print(type(t2))
- 只包含一個元組的元素需要使用逗號和小括號,否則會被誤認(rèn)為int,str等類型
t3=('Python',)
print(t3)
print(type(t3))
二、元組對象是否可以引用
- 若元組中的對象本身是不可變對象,則不能再引用其他對象
- 若元組中的對象本身是可變對象,則可變對象的引用不允許改變,但數(shù)據(jù)可以改變
t=(10,[20,30],9)
print(t)
print(type(t))
print(t[0],type(t[0]),id(t[0]))
print(t[1],type(t[1]),id(t[1]))
print(t[2],type(t[2]),id(t[2]))
#[1]=100 報錯:SyntaxError: cannot assign to literal
t[1].append(100) #向列表中添加元素
print(t,id(t[1])) #列表內(nèi)存地址不變
三、元組的遍歷
1.方法一:索引
t=('Python','world',98)
'''第一種獲取元組元素的方式,索引'''
print(t[0])
print(t[1])
print(t[2])
#print(t[3]) IndexError: tuple index out of range
2.方法二:遍歷
'''第二種獲取元組元素的方式,遍歷元組'''
for item in t:
??print(item)
集合


一、集合的創(chuàng)建
1.使用{}
s={2,3,4,5,5,6,7,7}
print(s) #不允許重復(fù)
2.使用內(nèi)置函數(shù)set()
s1=set(range(6))
print(s1,type(s1))
s2=set([1,2,4,5,5,5,6,6])
print(s2,type(s2))
s3=set((1,2,4,4,5,65)) #集合中的元素是無序的
print(s3,type(s3))
s4=set('Python')
print(s4,type(s4))
二、集合基礎(chǔ)操作
1.判斷
①in/not in
s={10,20,30,405,60}
print(10 in s)
print(100 in s)
print(50 not in s)
2.新增
①add()
s.add(80)
print(s)
②update()
s.update({200,400,300})
print(s)
s.update([100,123,456])
s.update((12,52,48))
print(s)
3.刪除
①remove()
一次刪除一個指定元素,若指定元素不存在拋出KeyError
②discard()
一次刪除一個指定元素,若指定元素不存在不拋異常
③pop()
一次刪除一個任意元素
④clear()
清空集合
三、集合間關(guān)系判斷
1.是否相等
- ==/!=
s={10,20,30,40}
s1={30,40,20,10}
print(s==s1) #True
print(s!=s1) #False
2.一個集合是否為另一個集合的子集
- issubset
s1={10,20,30,40,50,60}
s2={10,20,30,40}
s3={10,20,90}
print(s2.issubset(s1)) #True
print(s3.issubset(s1)) #False
3.一個集合是否為另一個集合的超集(母集)
- issuperset
print(s1.issuperset(s2)) #True
print(s1.issuperset(s3)) #False
4.兩個集合是否沒有交集
- isdisjioint
print(s2.isdisjoint(s3)) #False
s4={100,200,300}
print(s2.isdisjoint(s4)) #True
四、集合的數(shù)學(xué)操作
- 示意圖

1.交集
- intersection / &
s1={10,20,30,40}
s2={20,30,40,50,60}
print(s1.intersection(s2))
print(s1 & s2)
2.并集
- union / |
print(s1.union(s2))
print(s1 | s2) #union=|
print(s1)
print(s2)
3.差集
- difference / -
print(s1.difference(s2))
print(s1-s2) #difference=-
print(s1)
print(s2)
4.對稱差集
- symmetric_difference / ^
print(s1.symmetric_difference(s2))
print(s1^s2) #symmetric_difference=^
五、集合生成式
- {i*i for i in range()}
- 將列表生成式中的[]改為{}即可
#列表生成式
lst=[i*i for i in range(10)]
print(lst)
#集合生成式
lst={i*i for i in range(10)}
print(lst)
字符串



一、字符串的創(chuàng)建與滯留機制
- 駐留機制的幾種情況:
1.字符串長度為0或1時
2.符合標(biāo)識符的字符串(字母、數(shù)字、下劃線)
3.字符串只在編譯時駐留,運行時不會
4.[-5,256]之間的整數(shù)數(shù)字
二、字符串常用操作
1.查詢
①index()
查找子串substr第一次出現(xiàn)的位置,如果查找的子串不存在時,則拋出ValueError
s='hello,hello'
print(s.index('lo')) #3
print(s.find('lo')) #3
print(s.rindex('lo')) #9
print(s.rfind('lo')) #9
②rindex()
查找子串substr最后一次出現(xiàn)的位置,如果查找的子串不存在時,則拋出ValueError
③find()
查找子串substr第一次出現(xiàn)的位置,如果查找的子串不存在時,則返回-1
④rfind()
查找子串substr最后一次出現(xiàn)的位置,如果查找的子串不存在時,則返回-1
2.大小寫轉(zhuǎn)換
①upper()
把字符串中所有字符轉(zhuǎn)成大寫字母
s='hello,python'
a=s.upper() #轉(zhuǎn)成大寫后,會產(chǎn)生一個新的字符串對象
print(a,id(a))
print(s,id(s))
②lower()
把字符串中所有字符轉(zhuǎn)成小寫字母
b=s.lower() #轉(zhuǎn)成小寫后,會產(chǎn)生一個新的字符串對象
print(b,id(b))
print(s,id(s))
print(b==s)
print(b is s) #False
③swapcase()
把字符串中所有大寫字母轉(zhuǎn)成小寫字母,小寫字母轉(zhuǎn)成大寫字母
s2='hello,Python'
print(s2.swapcase())
④capitalize()
把第一個字符轉(zhuǎn)換為大寫,把其余字符轉(zhuǎn)成小寫字母
print(s2.capitalize())
⑤title()
把每個單詞的第一個字符轉(zhuǎn)換為大寫,把每個單詞的剩余字符轉(zhuǎn)換為小寫
print(s2.title())
3.對齊
①center()
居中對齊,第一個參數(shù)指定寬度,第二個參數(shù)指定填充符,第二個參數(shù)可選,默認(rèn)空格,如果設(shè)置寬度小于實際寬度則返回原字符串
s='hello,Python'
print(s.center(20,'*'))
②ljust()
左對齊,第一個參數(shù)指定寬度,第二個參數(shù)指定填充符,第二個參數(shù)可選,默認(rèn)空格,如果設(shè)置寬度小于實際寬度則返回原字符串
print(s.ljust(20,'*'))
print(s.ljust(10))
③rjust()
右對齊,第一個參數(shù)指定寬度,第二個參數(shù)指定填充符,第二個參數(shù)可選,默認(rèn)空格,如果設(shè)置寬度小于實際寬度則返回原字符串
print(s.rjust(20,'*'))
print(s.rjust(10))
④zfill()
右對齊,左邊用0填充,該方法只接收一個參數(shù),用于指定字符串的寬度,如果指定的寬度小于字符串的長度,則返回字符串本身
print(s.zfill(20))
print(s.zfill(10))
print('-8910'.zfill(8))
4.劈分
①split()
- 從字符串的左邊開始劈分,默認(rèn)的劈分字符是空格字符串,返回的值都是一個列表
- 以通過參數(shù)sep指定劈分字符串是的劈分符
- 通過參數(shù)maxsplit指定劈分字符串時的最大劈分次數(shù),在經(jīng)過最大次劈分之后,剩余的子串會單獨做為一部分
s='hello world Python'
lst=s.split()
print(lst) #未指定劈分字符,默認(rèn)空格
s1='hello|world|Python'
print(s1.split(sep='|'))
print(s1.split(sep='|',maxsplit=1))
②rsplit()
- 從字符串的右邊開始劈分,默認(rèn)的劈分字符是空格字符串,返回的值都是一個列表
- 以通過參數(shù)sep指定劈分字符串是的劈分符
- 通過參數(shù)maxsplit指定劈分字符串時的最大劈分次數(shù),在經(jīng)過最大次劈分之后,剩余的子串會單獨做為一部分
print(s.rsplit())
print(s1.rsplit(sep='|'))
print(s1.rsplit(sep='|',maxsplit=1)) #產(chǎn)生區(qū)別
5.判斷
①isidentifier()
判斷指定的字符串是不是合法的標(biāo)識符
②isspace()
判斷指定的字符串是否全部由空白字符組成(回車、換行,水平制表符)
③isalpha()
判斷指定的字符串是否全部由字母組成
④isdecimal()
判斷指定字符串是否全部由十進(jìn)制的數(shù)字組成
⑤isnumeric()
判斷指定的字符串是否全部由數(shù)字組成
⑥isalnum()
判斷指定字符串是否全部由字母和數(shù)字組成
6.替換
- replace()
第1個參數(shù)指定被替換的子串,第2個參數(shù)指定替換子串的字符串,該方法返回替換后得到的字符串,替換前的字符串不發(fā)生變化,調(diào)用該方法時可以通過第3個參數(shù)指定最大替換次數(shù)
s='hello,Python'
print(s.replace('python','Java'))
s1='hello,Python,Python,Python'
print(s1.replace('Python','Java',2))
7.合并
- join()
將列表或元組中的字符串合并成一個字符串
lst=['hello','java','Python']
print('|'.join(lst))
print(''.join(lst))
t=('hello','Java','Python')
print(''.join(t))
print('*'.join('Python'))
三、字符串的比較操作
- 運算符:>,>=,<,<=,==,!=
- 比較規(guī)則
首先比較兩個字符串中的第一個字符,如果相等則繼續(xù)比較下一個字符,依次比較下去,直到兩個字符串中的字符不相等時,其比較結(jié)果就是兩個字符串的比較結(jié)果,兩個字符串中的所有后續(xù)字符將不再被比較
- 比較原理
兩上字符進(jìn)行比較時,比較的是其ordinal value(原始值),調(diào)用內(nèi)置函數(shù)ord可以得到指定字符的ordinal value。與內(nèi)置函數(shù)ord對應(yīng)的是內(nèi)置函數(shù)chr調(diào)用內(nèi)置函數(shù)chr時指定ordinal value可以得到其對應(yīng)的字符
print('apple'>'app')
print('apple'>'banana')
print(ord('a'),ord('b'))
print(chr(97),chr(98))
四、字符串的切片操作
- 字符串是不可變類型;不具備增刪改等操作;切片操作將產(chǎn)生新的對象

s='hello,Python'
s1=s[:5] #未指定起始位置,從0開始切
s2=s[6:] #未指定結(jié)束位置,切到字符串最后一個元素
s3='!'
newstr=s1+s3+s2
print(s1)
print(s2)
print(newstr)
print(id(s))
print(id(s1))
print(id(s2))
print(id(newstr))
print(s[1:5:1]) #從1開始截到5(不含5),步長1(0→)
print(s[::-1]) #從字符串最后一個元素開始(←-1)
五、格式化字符串
1.%作占位符

name='張三'
age=20
print('我叫%s,今年%d歲' % (name,age))
2.{}作占位符

print('我叫{0},今年{1}歲'.format(name,age))
3.f-string
print(f'我叫{name},今年{age}歲')
print('%10d' % 99) #10表示的是寬度
print('%.3f' % 3.1415926) #.3表示的是精度(小數(shù)點后幾位)
print('%10.3f' % 3.1415926) #同時表示寬度和精度
print('{0:.3}'.format(3.1415926)) #此處.3表示一共三位有效數(shù)字
print('{0:.3f}'.format(3.1415926)) #此處,.3f表示小數(shù)點后三位
print('{:.3f}'.format(3.1415926)) #0表示占位符順序,可省略
六、字符串的編碼轉(zhuǎn)換
- 編碼:將字符串轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)(bytes)
- 解碼:將bytes類型的數(shù)據(jù)轉(zhuǎn)換成字符串類型

s='天涯共此時'
#編碼
print(s.encode(encoding='GBK')) #在GBK這種編碼格中,一個中文占兩個字節(jié)
print(s.encode(encoding='UTF-8')) #在UFT-8這種編碼格式中,一個中文占三個字節(jié)
#解碼
byte=s.encode(encoding='GBK')
print(byte.decode(encoding='GBK'))
函數(shù)
一、函數(shù)的創(chuàng)建與調(diào)用
1.創(chuàng)建
def 函數(shù)名([輸入?yún)?shù)])
??? 函數(shù)體
??? [return xxx]

2.調(diào)用
函數(shù)名([實際參數(shù)])
result=calc(10,20)
print(result)
def calc(a,b):
c=a+b
?? return c
result=calc(10,20)
print(result)
二、函數(shù)調(diào)用的參數(shù)傳遞
1.位置實參
根據(jù)形參對應(yīng)的位置進(jìn)行實參傳遞

def calc(a,b):?
#a,b稱為形式參數(shù),簡稱形參,位置在函數(shù)的定義處
??c=a+b
??return c
result=calc(10,20)?
#10,20稱為實際參數(shù)的值,簡稱實參,位置在函數(shù)的調(diào)用處
print(result)
2.關(guān)鍵字實參
根據(jù)形參名稱進(jìn)行實參傳遞

res=calc(b=10,a=20)
print(res)
三、函數(shù)參數(shù)傳遞的內(nèi)存分析
在函數(shù)調(diào)用過程中,進(jìn)行參數(shù)的傳遞:
- 如果是不可變對象,在函數(shù)體的修改不會影響實參的值
- 如果是可變對象,在函數(shù)體內(nèi)的修改會影響到實參的值
#函數(shù)的定義
def fun(arg1,arg2): #形參
??print('arg1=',arg1)
??print('arg2=',arg2)
??arg1=100
??arg2.append(10)
??print('arg1=',arg1)
??print('arg2=', arg2)
#函數(shù)的調(diào)用
n1=11?#實參
n2=[22,33,44]
fun(n1,n2) #位置傳參,形參與實參名稱不一致,按從左到右位置傳參
print('n1=',n1)
print('n2=',n2)