最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

python編輯的一些基礎(chǔ)

2023-07-13 00:38 作者:懶咧  | 我要投稿

print函數(shù)可以輸入字符串,數(shù)字,和表達(dá)式


print('hello world')


print(10)


print(10*9)


#將數(shù)據(jù)輸出文件中,注意點(diǎn),1.所指定的盤符在存在,2.使用file=fp


fp=open'D:/text.txt','a+')#a+如果文件不存在就創(chuàng)建,存在就在文件內(nèi)容的后面繼續(xù)追加


print('helloworld',file=fp)


fp.close()


轉(zhuǎn)義字符


\n換行


\t水平制表,(跳到下一個(gè)Tab的為位置)


\b退格


\r 回車,將單簽位置移到本行開頭


\?代表一個(gè)問號(hào)


\空字符


\\代表一個(gè)反斜杠字符'\'


\'代表一個(gè)單引號(hào)


\"代表一個(gè)雙引號(hào)字符


原字符,不希望字符串中的轉(zhuǎn)義字符起作用。就使用原字符,就是在字符串之前加上r,或R


注意事項(xiàng),最后一個(gè)字符不能是反斜杠


保留字查看


我的保留字:有一些單詞被我賦予了特定的意義,


這些單詞你在給你的任何對(duì)象起名字的時(shí)候都不能用


import keyword


print(keyword.kwlist)


我的規(guī)則你必須要知道


·變量、函數(shù)、類、模塊和其它對(duì)象的起的名字就叫標(biāo)識(shí)符


·規(guī)則:


? ? ·宇母、數(shù)宇、下劃線


·不能以數(shù)字開頭


·不能是我的保留字


·我是嚴(yán)格區(qū)分大小寫的


變量的定義和使用


變量由三部分組成


標(biāo)識(shí):表示對(duì)象所存儲(chǔ)的內(nèi)存地址,使用內(nèi)置函數(shù)id(obj)來獲取


類型:表示的是對(duì)象的數(shù)據(jù)類型,使用內(nèi)置函數(shù)type(obj)來獲取


值:表示對(duì)象所存儲(chǔ)的具體數(shù)據(jù),使用print(obj)可以將值進(jìn)行打印輸出


當(dāng)多次賦值之后,變量名會(huì)指向新的空間


數(shù)據(jù)類型


常用的數(shù)據(jù)類型


整數(shù)類型 ——>int ——>98


浮點(diǎn)數(shù)類型——>float——>3.14159


布爾類型——>bool——>True,False


字符串類型——>str——>'人聲苦短,我永Python'


數(shù)據(jù)可以表示為二進(jìn)制,十進(jìn)制,八進(jìn)制,十六進(jìn)制


print('十進(jìn)制',118)


print('二進(jìn)制',0b10101111)


print('八進(jìn)制',0o176)八進(jìn)制以0o開頭


print('十六進(jìn)制'0x1EAF)


浮點(diǎn)類型


浮點(diǎn)數(shù)整數(shù)部分和小數(shù)部分組成


浮點(diǎn)數(shù)存儲(chǔ)不精確性


使用浮點(diǎn)數(shù)進(jìn)行計(jì)算時(shí),可能會(huì)出現(xiàn)小數(shù)位數(shù)不確定的情況


布爾類型


用來表示真或假的值


True表示真,F(xiàn)alse表示假


布爾值可以轉(zhuǎn)化為整數(shù)


True——>1


False——>0


字符串類型


字符串又稱為不可變的字符序列


可以使用單引號(hào)''雙引號(hào)""三引號(hào)''' '''或""" """來定義


單引號(hào)和雙引號(hào)定義的字符串必須在一行


三引號(hào)定義的字符串可以分布在連續(xù)的多行


Python中的注釋


注釋


·在代碼中對(duì)代碼的功能進(jìn)行解釋說明的標(biāo)注性文字,


可以提高代碼的可讀性


·注釋的內(nèi)容會(huì)被Python解釋器忽略


·通常包括三種類型的注釋


·單行注釋——〉以“#”開頭,直到換行結(jié)束


·多行注釋——>并沒有單獨(dú)的多行注釋標(biāo)記,將一對(duì)三引號(hào)之間的代碼稱為多行注釋


·中文編碼聲明注釋——>在文件開頭加上中文聲明注釋,用以指定源碼文件的編碼格式


''' 多行注釋'''


算術(shù)運(yùn)算符


+加法運(yùn)算


-減法運(yùn)算


*乘法運(yùn)算


/除法運(yùn)算


//整除運(yùn)算


一正一負(fù)向下取整?


%


(有負(fù)數(shù))求余? 余數(shù)=被除數(shù)-除數(shù)*商


賦值運(yùn)算符


+=,-=,*=,/=,//=,%=


支持系列解包賦值


a,b,c=20,30,40


比較運(yùn)算符,比較運(yùn)算符的結(jié)果為bool類型


比較對(duì)象的表示使用is


比如a=10 id=120


b=10 id=120


a is b? ? true


is not表示a與b的標(biāo)識(shí)id不相等所以false


a is not b 為false


布爾運(yùn)算符


and并且? ? ? 有一個(gè)false就為false


or或者 有一個(gè)true就是true


not 對(duì)bool類型操作數(shù)取反


in 與not in


s='helloworld'


print('w' in s)w在s的變量的字符串里是對(duì)的


print('k' in s)k不在s變量的字符串里是錯(cuò)的


print('w' not in s)False


print('k'not in s)k不在s變量的字符串里就是對(duì)的


位運(yùn)算符


將數(shù)據(jù)轉(zhuǎn)成二進(jìn)制進(jìn)行計(jì)算


位與&,對(duì)應(yīng)數(shù)位都是1,結(jié)果數(shù)位才是1,否則為0


位或|,對(duì)應(yīng)數(shù)位都是0,結(jié)果數(shù)位才是0,否則為1


左移位運(yùn)算符<<,高位溢出舍棄,低位補(bǔ)0


右移位運(yùn)算符>>,低位溢出舍棄,高位補(bǔ)0


print(4<<1)向左移動(dòng)一位相當(dāng)于乘以2


print(4>>2)向右移動(dòng)2位相當(dāng)于除以4?


Python中的運(yùn)算符


運(yùn)算符優(yōu)先級(jí)


先是算術(shù)運(yùn)算符


后是位運(yùn)算,再后是比較運(yùn)算符,布爾運(yùn)算符


順序結(jié)構(gòu)


程序從上到下順序地執(zhí)行代碼,中間沒有任何的判斷和跳轉(zhuǎn),直到程序結(jié)束


對(duì)象的布爾值


Python一切皆對(duì)象,所有對(duì)象都有一個(gè)布爾值


獲取對(duì)象的布爾值


使用內(nèi)置函數(shù)bool()


以下對(duì)象的布爾值為False


False


數(shù)值0


None


空字符串


空列表


空元組


空字典


空集合


單分支結(jié)構(gòu)


語法結(jié)構(gòu)


if 條件表達(dá)式:


條件執(zhí)行體


雙分支結(jié)構(gòu)


if 條件表達(dá)式:


條件執(zhí)行體


else 條件表達(dá)式:


條件執(zhí)行體


if 條件表達(dá)式1:


條件執(zhí)行體1


elif 條件表達(dá)式2:


條件執(zhí)行體2


elif 條件表達(dá)式N:


條件執(zhí)行體N


[else:]


條件表達(dá)式N+1


嵌套if


語法結(jié)構(gòu):


if條件表達(dá)式1:


if內(nèi)層條件表達(dá)式:


內(nèi)層條件執(zhí)行體1


else:


內(nèi)存條件執(zhí)行體2


else:


條件執(zhí)行體


條件表達(dá)式


條件表達(dá)式是if......else的簡寫


語法結(jié)構(gòu):


x if? ? 判斷條件 else y


運(yùn)算規(guī)則


如果判斷條件的布爾值為True。條件表達(dá)式的返回值為x。否則條件表達(dá)式的返回值為False


pass語句


pass語句


語句什么都不做,只是一個(gè)占位符,用在語法上需要語句的地方


什么時(shí)候使用:


先搭建語法結(jié)構(gòu),還沒想好代碼怎么寫的時(shí)候


哪些語句一起使用


if語句的條件執(zhí)行體


for-in語句的循環(huán)體


定義函數(shù)時(shí)的函數(shù)體


內(nèi)置函數(shù)range()


創(chuàng)建range對(duì)象的三種方式


range(stop)——>創(chuàng)建一個(gè)(0,stop)之間的整數(shù)序列,步長為1


range(start,stop)——>創(chuàng)建一個(gè)[start,stop)之間的整數(shù)序列,步長為1


range(start,stop,step)——>創(chuàng)建一個(gè)[start,stop)之間的整數(shù)序列,步長為step


range類型的優(yōu)點(diǎn):不管range對(duì)象表示的整數(shù)序列有多長,所有range對(duì)象占用的


內(nèi)存空間都是相同的,因?yàn)閮H僅需要存儲(chǔ)start,stop和step,只有當(dāng)用到range對(duì)象時(shí),


才會(huì)去計(jì)算序列中的相關(guān)元素


循環(huán)結(jié)構(gòu)


反復(fù)做同一件事情的情況,稱為循環(huán)


循環(huán)結(jié)構(gòu)的流程圖


循環(huán)的分類


while


for -in


語法結(jié)構(gòu)


while 條件表達(dá)式:


條件執(zhí)行體(循環(huán)體)


選擇結(jié)構(gòu)的if與循環(huán)結(jié)構(gòu)while的區(qū)別


If是判斷一次,條件為True執(zhí)行一行


while是判斷N+1次,條件為True執(zhí)行N次


for-in循環(huán)


in表達(dá)從(字符串、序列等)中依次取值,又稱為遍歷


for-in遍歷的對(duì)象必須是可迭代對(duì)象


for-in的語法結(jié)構(gòu)


for自定義的變量in可迭代對(duì)象:循環(huán)體


for-in的執(zhí)行圖


循環(huán)體內(nèi)不需要訪問自定義變量,可以將自定義變量替代為下劃線


?流程控制語句break


break語句用于結(jié)束循環(huán)結(jié)構(gòu),通常與分支結(jié)構(gòu)if一起使用


流程控制語句continue


continue語句


勇于結(jié)束當(dāng)前循環(huán),進(jìn)入下一次循環(huán),通常與分支結(jié)構(gòu)中的if一起使用


列表


為什么需要列表


變量可以存儲(chǔ)一個(gè)元素,而列表是一個(gè)"大容器"可以存儲(chǔ)N多個(gè)元素,


程序可以方便地對(duì)這些數(shù)據(jù)進(jìn)行整體操作


列表相當(dāng)于其他語言中的數(shù)組


列表的創(chuàng)建


列表需要使用中括號(hào)[]元素之間使用英文的逗號(hào)進(jìn)行分隔


列表的創(chuàng)建方式


使用中括號(hào)


使用內(nèi)置函數(shù)list()


lst=['大圣','額額']


lst2=(['大圣','額額'])


列表的特點(diǎn)


列表元素按順序有序排序


索引映射唯一個(gè)數(shù)據(jù)


列表可以存儲(chǔ)重復(fù)數(shù)據(jù)


任意數(shù)據(jù)類型混存


根據(jù)需要?jiǎng)討B(tài)分配和回收內(nèi)存


列表的查詢操作


獲取列表中指定元素的索引


index()如查列表中存在N個(gè)相同元素,只返回相同元素中的第一個(gè)元素的索引


如果查詢的元素在列表中不存在,則會(huì)拋出ValueError


還可以在指定的start和stop之間進(jìn)行查找


獲取列表中的單個(gè)元素獲取單個(gè)元素


正向索引從0到N-1? ?舉例:lst[0]


逆向索引從-N到-1? ?舉例:lst[-N]


指定索引不存在,則拋出IndexError


獲取元素的查詢操作


獲取列表中的多個(gè)元素


語法格式


列表名[start:stop:step]


切片的結(jié)果——>原列表片段的拷貝


切片的范圍[start,stop]


step默認(rèn)為1——>簡寫為[start:stop]


step為正數(shù)[:stop:step]切片的第一個(gè)元素默認(rèn)是列表的第一個(gè)元素 從start開始往后計(jì)算切片


step為正數(shù)[stop::step]切片的最后一個(gè)元素默認(rèn)是列表的最后一個(gè)元素 從start開始往后計(jì)算切片


step為負(fù)數(shù)[:stop:step]切片的第一個(gè)元素默認(rèn)是列表的最后一個(gè)元素 從start開始往前計(jì)算切片


step為負(fù)數(shù)[stop::step]切片的最后一個(gè)元素默認(rèn)是列表的第一個(gè)元素 從start開始往前計(jì)算切片


列表元素的查詢操作


判斷指定元素在列表中是否存在


元素 in 列表名


元素 not in 列表名


列表元素的遍歷


for 迭代遍歷 in 列表名:


列表元素的增加操作


列表元素的增加操作


append()在列表的末尾添加一個(gè)元素


extend()在列表的末尾至少添加一個(gè)元素


insert()在列表的任意位置添加一個(gè)元素


切片在列表的任意位置添加至少一個(gè)元素


列表元素的刪除操作


列表元素的刪除操作


remove()


一次刪除一個(gè)元素


重復(fù)元素只刪除第一個(gè)


元素不存在拋出ValueError


pop()


刪除一個(gè)指定索引位置上的元素


指定索引不存在拋出IndeError


不知道索引,刪除列表中最后一個(gè)元素


切片 一次至少刪除一個(gè)元素


clear()清空列表中的所有元素


del 刪除列表


列表元素的修改操作


列表元素的修改操作


為指定索引的元素賦予一個(gè)新值


為指定的切片賦予一個(gè)新值


列表元素的排序操作


常見的兩種方式


用sort()方法,列有中的所有元素默認(rèn)按照從小到大的順序進(jìn)行排序


,可以指定reverse=True進(jìn)行降序排序


調(diào)用內(nèi)置函數(shù)sorted(),可以指定reverse=True,進(jìn)行降序排序,


生成一個(gè)新的列表對(duì)象,原列表不發(fā)生改變


列表生成式


列表生成式簡稱"生成列表的公式"


語法格式:


i*i for i in range(1,10)


注意事項(xiàng):"表示列表元素的表達(dá)式"中通常包含自定義變量


列表中的元素的值為2,4,6,8,10


lst2=[i*2 for i in range(1,6)]


print(lst2)


字典


Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,與列表一樣是一個(gè)可變序列


以鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù),字典是一個(gè)無序的序列


字典的實(shí)現(xiàn)原理


字典的實(shí)現(xiàn)原理與查字典類似,查字典是先根據(jù)部首或拼音查找


應(yīng)的頁碼,Python中的字典是根據(jù)key查找value所在的位置


字典的創(chuàng)建


字典的創(chuàng)建


最常用的方式:使用花括號(hào)


scores{'張三':100,'李四':98,'王五':45}


使用內(nèi)置函數(shù)dict()


dict(name='jack',age=20)


[]取值與使用get()取值的區(qū)別


[]如果字典中不存在指定的key,拋出keyError異常


get()方法取值,如果字典中不存在指定的key,并不會(huì)拋出KeyError而是返回None


,可以通過參數(shù)設(shè)置默認(rèn)的value,以便指定的key不存在時(shí)返回


字典的常用操作


key的判斷


key的判斷


in 指定的key在字典中存在返回True——>'張三'in scores


not in 指定的key在字典中不存在返回True——>'Marry' not in scores


字典元素的刪除


del scores['張三']


字典元素的新增


scores['Jack']=90


字典的常用操作


獲取字典視圖的三個(gè)方法


獲取字典視圖


keys()——>獲取字典中所有key


values()——>獲取字典中所有value


items()——>獲取字典中所有key,value對(duì)


字典的常用操作


字典元素的遍歷


for item in scores:


print(item)


字典的特點(diǎn)


字典中的所有元素都是一個(gè)key-value對(duì),key不允許重復(fù),value可以重復(fù)


字典中的元素是無序的


字典中的key必須是不可變對(duì)象


字典也可以根據(jù)需要?jiǎng)討B(tài)地伸縮


字典會(huì)浪費(fèi)較大的內(nèi)存,是一種使用空間換時(shí)間的數(shù)據(jù)結(jié)構(gòu)


字典生成式


內(nèi)置函數(shù)zip()


用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)元組,


然后返回由這些元組組成的列表


items=['Fruits','Books','0thers']?


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)之一,是一個(gè)不可變序列


不可變序列與可變序列


不變可變序:字符串、元組


不變可變序列:沒有增、刪,改的操作


可變序列:列表、字典


可變序列:可以對(duì)序列執(zhí)行增、刪、改操作,對(duì)象地址不發(fā)生更改


元組的創(chuàng)建方式


元組的創(chuàng)建方式


直接小括號(hào)t=(Python;‘hello',90)


使用內(nèi)置函數(shù)tuple()


t=tuple((“Python',hello',90))·


只包含一個(gè)元組的元素需要使用逗號(hào)和小括號(hào)


t=(10,)


為什么要將元組設(shè)計(jì)成不可變序列


為什么要將元組設(shè)計(jì)成不可變序列


在多任務(wù)環(huán)境下,同時(shí)操作對(duì)象時(shí)不需要加鎖


因此,在程序中盡量使用不可變序列


·注意事項(xiàng):元組中存儲(chǔ)的是對(duì)象的引用


a)如果元組中對(duì)象本身不可對(duì)象,則不能再引用其它對(duì)象


b)如果元組中的對(duì)象是可變對(duì)象,則可變對(duì)象的引用不允許


改變,但數(shù)據(jù)可以改變


元組的遍歷


·元組是可迭代對(duì)象,所以可以使用for..in進(jìn)行遍歷


t=('Python','world',98)


for item in t:


print(item)


什么是集合


集合


·Python語言提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu)


·與列表、字典樣都屬于可變類型的序列


·集合是沒有value的字典


集合的創(chuàng)建方式


集合的創(chuàng)建方式


直接{}


s={'world','hello',90}


使用內(nèi)置函數(shù)set()


集合中的元素不允許重復(fù)


集合中的元素是無序的


集合的相關(guān)操作


集合元素的判斷操作


in或not in


集合元素的新增操作


調(diào)用add()方法,一次添中一個(gè)元素


調(diào)用update()方法至少添加一個(gè)元素


集合元素的刪除操作


調(diào)用remove()方法,一次刪除一個(gè)指定元素,如果指定的元素不存在拋出


KeyError


調(diào)用discard()方法,一次刪除一個(gè)指定元素,如果指定的元素不存在不拋出異常


調(diào)用pop()方法,一次只刪除一個(gè)任意元素


調(diào)用clear()方法,清空集合


集合間的關(guān)系


兩個(gè)集合是否相等


可以使用運(yùn)算符==或!=進(jìn)行判斷


一個(gè)集合是否是另一個(gè)集合的子集


可以調(diào)用方法issubset進(jìn)行判斷


B是A的子集


一個(gè)集合是否是另一個(gè)集合的超集


可以調(diào)用方法issuperset進(jìn)行判斷


A是B的超集


兩個(gè)集合是否沒有交集


可以調(diào)用方法isdisjoint進(jìn)行判斷


intersection()與&等價(jià),交集操作


union與|等價(jià),并集操作


difference與-等價(jià),差集操作


symmetric_difference與^符號(hào)等價(jià),對(duì)稱差集操作


列表生成式


lst=[i*i for i in range(6)]


print(lst)


集合生成式


s={i*I for i in range(6)}


print(s)


字符串的駐留機(jī)制


字符串


在Python中字符串是基本數(shù)據(jù)類型,是一個(gè)不可變的字符序列


什么叫字符串駐留機(jī)制呢?


僅保存一份相同且不可變字符串的方法,


不同的值被存放在字符串的駐留池中,


Python的駐留機(jī)制對(duì)相同的字符串只保留一份拷貝,后續(xù)創(chuàng)建相同字符串時(shí),


不會(huì)開辟新空間,而是把該字符串的地址賦給新創(chuàng)建的變量


字符串的駐留機(jī)制


駐留機(jī)制的幾種情況(交互模式)


字符串的長度為0或1時(shí)


符合標(biāo)識(shí)符的字符串


字符串只在編譯時(shí)進(jìn)行駐留,而非運(yùn)行


時(shí)[-5,256]之間的整數(shù)數(shù)字


sys中的intern方法強(qiáng)制2個(gè)字符串指向同一個(gè)對(duì)象


PyCharm對(duì)字符串進(jìn)行了優(yōu)化處理


字符串駐留機(jī)制的優(yōu)缺點(diǎn)


·當(dāng)需要值相同的字符串時(shí),


可以直接從字符串池里拿來使用,


避免頻繁的創(chuàng)建和銷毀,提升效率和節(jié)約內(nèi)存,


因此拼接字符串和修改字符串是會(huì)比較影響性能的。


在需要進(jìn)行字符串拼接時(shí)建議使用str類型的join方法,


而非+,因?yàn)閖oin()方法是先計(jì)算出所有字符中的長度,


然后再拷貝,只new一次對(duì)象,效率要比"+”效率高


字符串的查詢操作的方法


查詢方法


index() 查找子串substr第一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則拋出ValueError


rindex()查找子串substr最后一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則拋出ValueError


find()查找子串substr第一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則返回-1


rfind()查找子串substr最后一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則返回-1


·字符串的大小寫轉(zhuǎn)換操作的方法


大小寫轉(zhuǎn)換


upper()把字符串中所有字符都轉(zhuǎn)成大寫字母? 轉(zhuǎn)換成大寫之后會(huì)產(chǎn)生一個(gè)新的字符串對(duì)象


lower()把字符串中所有字符都轉(zhuǎn)成小寫字母? 轉(zhuǎn)換成小寫之后會(huì)產(chǎn)生一個(gè)新的字符串對(duì)象


swapcase()把字符串中所有大寫字母轉(zhuǎn)成小寫字母,把所有小寫字母都轉(zhuǎn)成大寫字母


capitalize()把第一個(gè)字符轉(zhuǎn)換為大寫,把其余字符轉(zhuǎn)換為小寫


title()把每個(gè)單詞的第一個(gè)字符轉(zhuǎn)換為大寫,把每個(gè)單詞的剩余字符轉(zhuǎn)換為小寫


字符串的常用操作


·字符串內(nèi)容對(duì)齊操作的方法


字符串對(duì)齊


center()


居中對(duì)齊,第1個(gè)參數(shù)指定寬度,第2個(gè)參數(shù)指定填充符,


第2個(gè)參數(shù)是可選的,默認(rèn)是空格


,如果設(shè)置寬度小于實(shí)際寬度則則返回原字符串


ljust()


左對(duì)齊,第1個(gè)參數(shù)指定寬度,第2個(gè)參數(shù)指定填充符,第2個(gè)參數(shù)是可選的,


默認(rèn)是空格如果設(shè)置寬度小于實(shí)際寬度則則返回原字符串


rjust()


右對(duì)齊,第1個(gè)參數(shù)指定寬度,第2個(gè)參數(shù)指定填充符,第2個(gè)參數(shù)是可選的,


默認(rèn)是空格如果設(shè)置寬度小于實(shí)際寬度則則返回原字符串


zfill()


右對(duì)齊,左邊用0填充,該方法只接收一個(gè)參數(shù),用于指定字符串的寬度,


如果指定的寬度小于等于字符串的長度,返回字符串本身


字符串劈分操作的方法


字符串的劈分


split()


從字符串的左邊開始劈分,默認(rèn)的劈分字符是空格字符串,返回的值都是一個(gè)列表


以通過參數(shù)sep指定劈分字符串是的劈分符


通過參數(shù)maxsplit指定劈分字符串時(shí)的最大劈分次數(shù),


在經(jīng)過最大次劈分之后,剩余的子串會(huì)單獨(dú)做為一部分


rsplit()


從字符串的右邊開始劈分,默認(rèn)的劈分字符是空格字符串,返回的值都是一個(gè)列表


以通過參數(shù)sep指定劈分字符串是的劈分符


通過參數(shù)maxsplit指定劈分字符串時(shí)的最大劈分次數(shù),


在經(jīng)過最大次劈分之后,剩余的子串會(huì)單獨(dú)做為一部分


判斷字符串操作的方法


判斷字符串的方法


isidentifier()判斷指定的字符串是不是合法的標(biāo)識(shí)符


isspace()判斷指定的字符串是否全部由空白字符組成(回車、換行,水平制表符)


isalpha()判斷指定的字符串是否全部由字母組成


isdecimal()判斷指定字符串是否全部由十進(jìn)制的數(shù)字組成


isnumeric()判斷指定的字符串是否全部由數(shù)字組成


isalnum()判斷指定字符串是否全部由字母和數(shù)字組成


字符串操作的其它方法


字符串替換


replace()作用:


第1個(gè)參數(shù)指定被替換的子串,


第2個(gè)參數(shù)指定替換子串的字符串,該方法返回替換后得到的字符串,


替換前的字符串不發(fā)生變化,


調(diào)用該方法時(shí)可以通過第3個(gè)參數(shù)指定最大替換次數(shù)


字符串的合并


join()


將列表或元組中的字符串合并成一個(gè)字符串


字符串的比較操作


運(yùn)算符:>,>=,<,<=,==,!=


比較規(guī)則:首先比較兩個(gè)字符串中的第一個(gè)字符,


如果相等則繼續(xù)比較下一個(gè)字符,依次比較下去,直到兩個(gè)字符串中的字符不相等時(shí),


其比較結(jié)果就是兩個(gè)字符串的比較結(jié)果,兩個(gè)字符串中的所有后續(xù)字符將不再被比較


比較原理:兩上字符進(jìn)行比較時(shí),比較的是其ordinal value(原始值),


調(diào)用內(nèi)置函數(shù)ord可以得到指定字符的ordinal value。


與內(nèi)置函數(shù)ord對(duì)應(yīng)的是內(nèi)置函數(shù)chr,


調(diào)用內(nèi)置函數(shù)chr時(shí)指定ordinal value可以得到其對(duì)應(yīng)的字符


字符串的切片操作


字符串是不可變類型


·不具備增、刪、改等操作


·切片操作將產(chǎn)生新的對(duì)象


s='hello,Python'


s1=s[:5]由于沒有指定起始位置,所以從0開始切


s2=s[6:]由于沒有指定結(jié)束位置,所以切到字符串最后一個(gè)元素


s3='!'


newstr=s1+s3+s2


切片操作[start:end:step]


print(s[1:5:1])#從1開始截到5(不包含5),步長為1


print(s[::2])#默認(rèn)從0開始,沒有寫結(jié)束,默認(rèn)到字符串的最后一個(gè)元素,步長為2,兩個(gè)元素之間的索引間隔為2


print(s[::-1])#默認(rèn)從字符串的最后一個(gè)元素開始,到字符串的第一個(gè)元素結(jié)束,因?yàn)椴介L為負(fù)數(shù)


print(s[-6::1])#從素引為-6開始,到寧符串的最后一個(gè)元素結(jié)束,步長為1


格式化字符串


格式化字符串的兩種方式


%作占位符


print(’我叫%s,今年%d歲’%(name,age))


{}作占位符


print'我叫{0},今年{1}歲’.format(name,age))


f-string


print(f'我叫{name},今年{age}歲')


%d是指寬度例如print('%10d'% 99) 10表示寬度


%f是表示保留小數(shù),print('%.3f'%3.1415926)? ?.3表示是小數(shù)點(diǎn)后三位


同時(shí)表示寬度和精度


print('%10.3f' %3.1415926) 一共總寬度為10,小數(shù)點(diǎn)后3位


print('{0:.3}'.format(3.1415926))#.3表示的是一共是3位數(shù)


print'{0.3f}'.format(3.1415926))#.3f表示是3位小數(shù)


print({:10.3f)'.format(3.1415926))#同時(shí)設(shè)置寬度和精度,一共是10位,3位是小數(shù)


字符串的編碼轉(zhuǎn)換


·為什么需要字符串的編碼轉(zhuǎn)換


編碼與解碼的方式


·編碼:將字符串轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)(bytes)


·解碼:將bytes類型的數(shù)據(jù)轉(zhuǎn)換成字符串類型


s='天涯共此時(shí)’


#編碼


print(s.encode(encoding='GBK'))#在GBK這種編碼格中一個(gè)中文占兩個(gè)字節(jié)


print(s.encode(encoding='UTF-8'))#在UTF-8這種編輯格式中,一個(gè)中文占三個(gè)字節(jié)


#解碼?


#byte代表就是一個(gè)二進(jìn)制數(shù)據(jù)(字節(jié)類型的數(shù)據(jù))


?byte=s.encode(ncoding='GBK')#偏碼


?print(byte,decode(encoding='GBK'))#解碼


byte=s.encode(encoding='UTF-8')?


print(byte.decode(encoding='UTF-8'))


函數(shù)


什么是函數(shù)


函數(shù)就是執(zhí)行特定任和以完成特定功能的一段代碼


? ? 為什么需要


函數(shù)


·復(fù)用代碼


·隱藏實(shí)現(xiàn)細(xì)節(jié)


·提高可維護(hù)性


·提高可讀性便于調(diào)試


函數(shù)的創(chuàng)建


def 函數(shù)名([輸入?yún)?shù)]):


? ? 函數(shù)體


[return xxx]


函數(shù)的返回值


函數(shù)返回多個(gè)值時(shí),結(jié)果為元組


函數(shù)的返回值


(1)如果函數(shù)沒有返回值【函數(shù)執(zhí)行完畢之后,不需要給調(diào)用處提供數(shù)據(jù)】return可以省略不寫


(2)函數(shù)的返回值,如果是1個(gè),直接返回類型


(3)函數(shù)的返回值,如果是多個(gè),返回的結(jié)果為元組


函數(shù)在定義時(shí),是否需要返回值,視情況而定


函數(shù)的參數(shù)定義


函數(shù)定義默認(rèn)值參數(shù)


·函數(shù)定義時(shí),給形參設(shè)置默認(rèn)值,只有與默認(rèn)值不符的時(shí)候才需要傳遞實(shí)參


函數(shù)的參數(shù)定義


個(gè)數(shù)可變的位置參數(shù)


定義函數(shù)時(shí),可能無法事先確定傳遞的位置實(shí)參的個(gè)數(shù)時(shí),使用可變的


位置參數(shù)


使用*定義個(gè)數(shù)可變的位置形參


結(jié)果為一個(gè)元組


個(gè)數(shù)可變的關(guān)鍵字形參


定義函數(shù)時(shí),無法事先確定傳遞的關(guān)鍵字實(shí)參的個(gè)數(shù)時(shí),使用可變的關(guān)


鍵字形參


使用**定義個(gè)數(shù)可變的關(guān)鍵字形參


結(jié)果為一個(gè)字典


函數(shù)個(gè)數(shù)可變的位置參數(shù),只能是1個(gè)


個(gè)數(shù)可變的關(guān)鍵字參數(shù),只能是1個(gè)


在一個(gè)函數(shù)的定義過程中,既有個(gè)數(shù)可變的關(guān)鍵字形參,也有個(gè)數(shù)可變的位置形參,


要求,個(gè)數(shù)可變的位置形參,放在個(gè)數(shù)可變的關(guān)鍵字形參之前


變量的作用域


變量的作用域


·程序代碼能訪問該變量的區(qū)域


·根據(jù)變量的有效范圍可分為


·局部變量


·在函數(shù)內(nèi)定義并使用的變量,只在函數(shù)內(nèi)部有效,局部變量使用global聲明,這個(gè)變量就會(huì)就成全局變量


全局變量


·函數(shù)體外定義的變量,可作用于函數(shù)內(nèi)外


global age #函數(shù)內(nèi)部定義的變量,局部變量,局部變量使用global聲明,這個(gè)變量實(shí)際上就變成了全局變量


遞歸函數(shù)


什么是遞歸函數(shù)


·如果在一個(gè)函數(shù)的函數(shù)體內(nèi)調(diào)用了該函數(shù)本身,這個(gè)函數(shù)就稱為遞歸函數(shù)


遞歸的組成部分


·遞歸調(diào)用與遞歸終止條件


遞歸的調(diào)用過程


·每遞歸調(diào)用一次函數(shù),都會(huì)在棧內(nèi)存分配一個(gè)棧幀,


·每執(zhí)行完一次函數(shù),都會(huì)釋放相應(yīng)的空間


遞歸的優(yōu)缺點(diǎn)


·缺點(diǎn):占用內(nèi)存多,效率低下


·優(yōu)點(diǎn):思路和代碼簡單


Bug的由來


·世界上第一部萬用計(jì)算機(jī)的進(jìn)化版-馬克2號(hào)(Mark I)


Bug的常見類型


·粗心導(dǎo)致錯(cuò)誤的自查寶典


1.漏了末尾的冒號(hào),如if語句,循環(huán)語句,else子句等


2.縮進(jìn)錯(cuò)誤,該縮進(jìn)的沒縮進(jìn),不該縮進(jìn)的瞎縮進(jìn)


3.把英文符號(hào)寫成中文符號(hào),比如說:引號(hào),冒號(hào),括號(hào)


4.字符串拼接的時(shí)候,把字符串和數(shù)字拼在一起


5.沒有定義變量,比如說while的循環(huán)條件的變量


6.“=="比較運(yùn)算符和”=”賦值運(yùn)算符的混用


Bug的常見類型


·被動(dòng)掉坑問題的解決方案


·Python提供了異常處理機(jī)制,可以在異常出現(xiàn)時(shí)即


時(shí)捕獲,然后內(nèi)部“消化”,讓程序繼續(xù)運(yùn)行


異常處理


try:


代碼塊


except:


輸出語句


Python的異常處理機(jī)制


·多個(gè)except結(jié)構(gòu)·捕獲異常的順序按照先子類后父親類的順序,


為了避免遺漏可能出現(xiàn)的異常,可以在最后增加BaseException


try...except...else結(jié)構(gòu)


·如果try塊中沒有拋出異常,則執(zhí)行else塊,


如果try中拋出異常except塊


try...except...else...finally結(jié)構(gòu)


finally塊無論是否發(fā)生異常都會(huì)被執(zhí)行,


能常用來釋放try塊中申請(qǐng)的資源


Python中常見的異常類型


異常類型? ? ? ? ? ? ? ? ? ? ? ? ?描述


ZeroDivisionError? ? ? ? ? 除(或取模)零(所有數(shù)據(jù)類型)


IndexError? ? ? ? ? ? ? ? ? ? ? 序列中沒有此索引( index)


KeyError? ? ? ? ? ? ? ? ? ? ? ? ?映射中沒有這個(gè)鍵


NameError? ? ? ? ? ? ? ? ? ? ?未聲明/初始化對(duì)象(沒有屬性)


SyntaxError? ? ? ? ? ? ? ? ? ? Python 語法錯(cuò)誤


ValueError? ? ? ? ? ? ? ? ? ? ? 傳入無效的參數(shù)


traceback模塊


使用traceback模塊打印異常信息


traceback.print_exc()


斷點(diǎn)程序運(yùn)行到此處,暫時(shí)掛起,停止執(zhí)行。


此時(shí)可以詳細(xì)觀察程序的運(yùn)行情況,方便做出進(jìn)一步的判斷


進(jìn)入調(diào)試視圖進(jìn)入調(diào)試視圖的三種方式


(1)單擊工具欄上的按鈕卷


(2)右鍵單擊編輯區(qū):點(diǎn)擊: debug'模塊名


(3)快捷鍵: shift+F9


·類是多個(gè)類似事物組成的群體的統(tǒng)稱。


能夠幫助我們快速理解和判斷事物的性質(zhì)


·數(shù)據(jù)類型


·不同的數(shù)據(jù)類型屬于不同的類


·使用內(nèi)置函數(shù)查看數(shù)據(jù)類型


·對(duì)象·100、99、520都是int類之下包含的相似的不同個(gè)例,


這個(gè)個(gè)例專業(yè)數(shù)語稱為實(shí)例或?qū)ο?/p>


類的創(chuàng)建


class 類名:#類名每個(gè)單詞的首字母大寫,其余小寫


pass


類的組成


·類屬性#直接寫在類里的變量稱為類屬性


·實(shí)例方法


def eat(self)


print('實(shí)力方法括號(hào)要寫self')


·靜態(tài)方法


@staticmethod


def method():


print('')


·類方法


@classmethod


def cm(cls):


print('類方法')


在類之外定義的稱為函數(shù),在類之內(nèi)定義的稱為方法


靜態(tài)方法


@staticmethod


@classmethod


def init (self, name, age):


self.name=name #se1f.name稱為實(shí)體屬性個(gè)賦值的操作


,將局部變量的name的值賦給實(shí)體屬性


self. age=age


對(duì)象的創(chuàng)建


對(duì)象的創(chuàng)建又稱為類的實(shí)體化


語法:


實(shí)體名=類名


例子:


#創(chuàng)建 Student類的實(shí)例對(duì)象


stu=Student('Jack', 20)?


print(stu.name)#實(shí)例屬性?


print(stu.age)#實(shí)例屬性?


stu. info()實(shí)例方法


意義:有了實(shí)例,就可以調(diào)用類中的內(nèi)容


類屬性、類方法、靜態(tài)方法


類屬性:類中方法外的變量稱為類屬性,被該類的所有對(duì)象所共享


類方法:使用@ classmethod修飾的方法,使用類名直接訪問的方法


靜態(tài)方法:使用@ staticmethod修飾的主法,使用類名直接訪問的方法


動(dòng)態(tài)綁定屬性和方法


Python是動(dòng)態(tài)語言,在創(chuàng)建對(duì)象之后,可以動(dòng)態(tài)地綁定屬性和方法


def show():


print('我是一函數(shù)')


?stu=Student('Jack', 20)


stu. gender=男#態(tài)綁定性別


print(stu. name, stu age, stu gender)


stu.show=show#動(dòng)態(tài)綁定方法


stu show()


面向?qū)ο蟮娜筇卣?/p>


封裝:提高程序的安全性·將數(shù)據(jù)(屬性)和行為(方法)包裝到類對(duì)象中。


在方法內(nèi)部對(duì)屬性進(jìn)行操作,在類對(duì)象的外部調(diào)用方法。


這樣無需關(guān)心方法內(nèi)部的具體實(shí)現(xiàn)細(xì)節(jié),從而隔離了復(fù)雜度在 Python中沒有


專門的修飾符用于屬性的私有,如果該屬性不希望在類對(duì)象外部被訪問,


前邊使用兩個(gè)“”。


繼承:提高代碼的復(fù)用性


多態(tài):提高程序的可擴(kuò)展性和可維護(hù)性


self.__age=age#年齡不希望在類的外部被使用,所以加了兩個(gè)_


stu.show()


#在類的外使用使用name與age


print(stu._Student__age)#在類的外部可以通過_Student__age


繼承


語法格式


? ? class子類類名(父類1,父類2..):


? ? pass


如果一個(gè)類沒有繼承任何類,則默認(rèn)繼承 object


Python支持多繼承


定義子類時(shí),必須在其構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù)


方法重寫


如果子類對(duì)繼承自父類的某個(gè)屬性或方法不滿意,可以在子類中對(duì)其(方法體)進(jìn)行重新編寫


子類重寫后的方法中可以通過super(.Xx)調(diào)用父類中被重寫的方法


object類


object類是所有類的父類,因此所有類都有 object類的屬性和方法


內(nèi)置函數(shù)dir()可以查看指定對(duì)象所有屬性


Object有一個(gè)st(方法,用于返回一個(gè)對(duì)于"對(duì)象的描述",


對(duì)應(yīng)于內(nèi)置函數(shù)str()經(jīng)常用于print()方法,幫我們查看對(duì)象的信息,


所以我們經(jīng)常會(huì)對(duì)__str__()進(jìn)行重寫


多態(tài)


簡單地說,多態(tài)就是“具有多種形態(tài)”,它指的是:即便不知道一個(gè)變量所引用的


對(duì)象到底是什么類型,仍然可以通過這個(gè)變量調(diào)用方法,在運(yùn)行過程中根據(jù)變量


所引用對(duì)象的類型,動(dòng)態(tài)決定調(diào)用哪個(gè)對(duì)象中的方法


靜態(tài)語言和動(dòng)態(tài)語言關(guān)于多態(tài)的區(qū)別


靜態(tài)語言實(shí)現(xiàn)多態(tài)的三個(gè)必要條件


繼承


方法重寫


父類引用指向子類對(duì)象


動(dòng)態(tài)語言的多態(tài)崇尚“鴨子類型"當(dāng)看到一只鳥走起來像鴨子、


游泳起來像鴨子收起來也像鴨子,那么這只鳥就可以被稱為鴨子。


在鴨子類型中,不需要關(guān)心對(duì)象是什么類型,到底是不是鴨子,只關(guān)心對(duì)象的行為。


特殊方法和特殊屬性


? ? ? ? ? ? ? ? ?名稱? ? ? ? ? ? ? ? ? ? ? 描述


特殊屬性? ?__dict__? ? ? ? ? ? ? ? ?獲得類對(duì)象或?qū)嵗龑?duì)象所綁定的所有屬性和方法的字典




特殊方法? ?__len__()? ? ? ? ? ? ? 通過重寫__1en__()方法,讓內(nèi)置函數(shù)1en()的參數(shù)可以是自定義類型


__add__()? ? ? ? ? ? ? 通過重寫__add__()方法,可使用自定義對(duì)象具有“+”功能


__new__()? ? ? ? ? ? ? 用于創(chuàng)建對(duì)象


__init__()? ? ? ? ? ? ? 對(duì)創(chuàng)建的對(duì)象進(jìn)行初始化


類的淺拷貝與深拷貝


變量的賦值操作


只是形成兩個(gè)變量,實(shí)際上還是指向同一個(gè)對(duì)象


淺拷貝


Python拷貝一般都是淺拷貝,拷貝時(shí),對(duì)象包含的子對(duì)象內(nèi)容不拷貝


,因此,源對(duì)象與拷貝對(duì)象會(huì)引用同一個(gè)子對(duì)象


深拷貝


·使用copy模塊的 deepcopy函數(shù),遞歸拷貝對(duì)象中包含


的子對(duì)象,源對(duì)象和拷貝對(duì)象所有的子對(duì)象也不相同


模塊


模塊英文為 Modules


·函數(shù)與模塊的關(guān)系


·一個(gè)模塊中可以包含N多個(gè)函數(shù)


在Python中一個(gè)擴(kuò)展名為.py的文件就是一個(gè)模塊


使用模塊的好處


·方便其它程序和腳本的導(dǎo)入并使用


避免函數(shù)名和變量名沖突


提高代碼的可維護(hù)性


提高代碼的可重用性


自定義模塊


創(chuàng)建模塊


新建一個(gè)py文件,名稱盡量不要與 Python自帶的標(biāo)準(zhǔn)模塊名稱相同


導(dǎo)入模塊


import? ?模塊名稱? ?[as別名]


from? 模塊名稱 import函數(shù)/變量/類


以主程序形式運(yùn)行


以主程序形式運(yùn)行


在每個(gè)模塊的定乂中都包括一個(gè)記錄模塊名稱的變量__name__,程序可


以檢查該變量,以確定他們?cè)谀膫€(gè)模塊中執(zhí)行。如果一個(gè)模塊不是被導(dǎo)入


到其它程序中執(zhí)行,那么它可能在解釋器的頂級(jí)模


塊中執(zhí)行。頂級(jí)模塊的__name__變量的值為__main__


Python中的包


Python中的包


包是一個(gè)分層次的目錄結(jié)構(gòu),它將一組功能相近的模塊組織在一個(gè)目錄下作用:


代碼規(guī)范


·避免模塊名稱沖突


包與目錄的區(qū)別


包含__init__. py文件的目錄稱為包


目錄里通常不包含__init__. py文件


包的導(dǎo)入


import? ? 包名.模塊名


導(dǎo)入帶有包的模塊時(shí)注意事項(xiàng)


使用import方式進(jìn)行導(dǎo)入時(shí),只能跟包名或模塊名


使用from ... Import可以導(dǎo)入包,模塊,函數(shù),變量


Python中常用的內(nèi)置模塊


模塊名? ? ? ? ? 描述


sys? ? ? ? ? ? ? ?與 Python解釋器及其環(huán)境操作相關(guān)的標(biāo)準(zhǔn)庫


time? ? ? ? ? ? ?提供與時(shí)間相關(guān)的各種函數(shù)的標(biāo)準(zhǔn)庫


os? ? ? ? ? ? ? ? 提供了訪問操作系統(tǒng)服務(wù)功能的標(biāo)準(zhǔn)庫


calendar? ? ? 提供與日期相關(guān)的各種函數(shù)的標(biāo)準(zhǔn)庫


urllib? ? ? ? ? ? 用于讀取來自網(wǎng)上(服務(wù)器)的數(shù)據(jù)標(biāo)準(zhǔn)庫


json? ? ? ? ? ? ?用于使用JS0N序列化和反序列化對(duì)象


re? ? ? ? ? ? ? ? 用于在字符串中執(zhí)行正則表達(dá)式匹配和替換


math? ? ? ? ? ?提供標(biāo)準(zhǔn)算術(shù)運(yùn)算函數(shù)的標(biāo)準(zhǔn)庫


decimal? ? ? 用于進(jìn)行精確控制運(yùn)算精度、有效數(shù)位和四舍五入操作的十進(jìn)制運(yùn)算


logging? ? ? 提供了靈活的記錄事件、錯(cuò)誤、警告和調(diào)試信息等目志信息的功能


第三方模塊的安裝及使用


第三方模塊的安裝


pip install 模塊名


第三方模塊的使用


import 模塊名


編碼格式


常見的字符編碼格式


Python的解釋器使用的是 Unicode(內(nèi)存)


py文件在磁盤上使用UTF-8存儲(chǔ)(外存)


文件的讀寫俗稱"IO操作"


文件讀寫操作流程


內(nèi)置函數(shù)open()創(chuàng)建文件對(duì)象


常用的文件打開模式


文件的類型


按文件中數(shù)據(jù)的組織形式,文件分為以下兩大類


文本文件:


存儲(chǔ)的是普通“字符”文本,默認(rèn)為 unicode字符集,


可以使用記本事程序打開


二進(jìn)制文件:


把數(shù)據(jù)內(nèi)容用“字節(jié)"進(jìn)行存儲(chǔ),無法用記事本打開,必須使用專用的軟件打開,


舉例:mp3音頻文件jpg圖片doC文檔等


打開模式? ?描述


r 以只讀模式打開文件,文件的指針將會(huì)放在文件的開頭


w 以只寫模式打開文件,如果文件不存在則創(chuàng)建,如果文件存在,則覆蓋原有內(nèi)容,文件指針在文件的開頭


a 以追加模式打開文件,如果文件不存在則創(chuàng)建,文件指針在文件開頭,如果文件存在,則在文件末尾追加內(nèi)容,文件指針在原文件末尾


b 以二進(jìn)制方式打開文件,不能單獨(dú)使用,需要與共它模式一起使用,rb,或者wb


+ 以讀寫方式打開文件,不能單獨(dú)使用,需要與其它模式一起使用,a+


文件對(duì)象的常用方法


方法名? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明


read([size])? ? ? ? ? ? ? ? ? ? ? ? 從文件中讀取size個(gè)字節(jié)或字符的內(nèi)容返回。若省略[size]則讀取到文件末尾,即一次讀取文件所有內(nèi)容


readline()? ? ? ? ?從文本文件中讀取一行內(nèi)容


readlines()? ? ? ? ? ? ? ? ? ? ? ? ?把文本文件中每一行都作為獨(dú)立的字符串對(duì)象,并將這些對(duì)象放入列表返回


write(str)? ? ? ? ? ? ? ? ? ? ? ? ? ?將字符串str內(nèi)容寫入文件


writelines(s_list)? ? ? ? ? ? ? ? 將字符串列表s_list寫入文本文件,不添加換行符


seek(offset[,whence])? ? ? ?把文件指針移動(dòng)到新的位置, offset表示相對(duì)于whence的位置:


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? offset:為正往結(jié)束方向移動(dòng),為負(fù)往開始方向移動(dòng)


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? whence不同的值代表不同含義:


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0:從文件頭開始計(jì)算(默認(rèn)值)


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1:從當(dāng)前位置開始計(jì)算


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2:從文件尾開始計(jì)算


tell()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回文件指針的當(dāng)前位置


flush()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 把緩沖區(qū)的內(nèi)容寫入文件,但不關(guān)閉文件


close()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 把緩沖區(qū)的內(nèi)容寫入文件,同時(shí)關(guān)閉文件,釋放文件對(duì)象相關(guān)資源


Wt語句(上下文管理器)


with語句可以自動(dòng)管理上下文資源,不論什么原因跳出with塊,


都能確保文件正確的關(guān)閉,以此來達(dá)到釋放資源的目的


σs模塊是Python內(nèi)內(nèi)置的與操作系統(tǒng)功能和文件系統(tǒng)相關(guān)的模塊,


該模塊中的語句的執(zhí)行結(jié)果通常與操作系統(tǒng)有關(guān)


,在不同的操作系統(tǒng)上運(yùn)行,得到的結(jié)果可能不一樣。


os模塊與os.path模塊用于對(duì)目錄或文件進(jìn)行操作


函數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明


getcwd? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回當(dāng)前的工作目錄


listdir(path)? ? ? ? ? ? ? ? ? ? ? 返回指定路徑下的文件和目錄信息


mkdir(path[, mode])? ? ? ?創(chuàng)建目錄


makedirs(path1/path2...[,mode]) 創(chuàng)建多級(jí)目錄


rmdir(path)? ? ?刪除目錄


removedirs(path1/path2......)? ? ? ? 刪除多級(jí)目錄


chdir(path)? ? ?將path設(shè)置未當(dāng)前工作目錄


os.path模塊操作目錄相關(guān)函數(shù)


函數(shù) 說明


abspath(path) 用于獲取文件或目錄的絕對(duì)路徑


exists(path) 用于判斷文件或目錄是否存在,如果存在返回True,否則返回False


join(path,name) 將目錄與目錄或者文件名拼接起來


splitext(path) 分離文件名和擴(kuò)展名


basename(path) 從一個(gè)目錄中提取文件名


dirname(path) 從一個(gè)路徑種提取文件路徑,不包括文件名


isdir(path) 用于判斷是否為路徑print函數(shù)可以輸入字符串,數(shù)字,和表達(dá)式


print('hello world')


print(10)


print(10*9)


#將數(shù)據(jù)輸出文件中,注意點(diǎn),1.所指定的盤符在存在,2.使用file=fp


fp=open'D:/text.txt','a+')#a+如果文件不存在就創(chuàng)建,存在就在文件內(nèi)容的后面繼續(xù)追加


print('helloworld',file=fp)


fp.close()


轉(zhuǎn)義字符


\n換行


\t水平制表,(跳到下一個(gè)Tab的為位置)


\b退格


\r 回車,將單簽位置移到本行開頭


\?代表一個(gè)問號(hào)


\空字符


\\代表一個(gè)反斜杠字符'\'


\'代表一個(gè)單引號(hào)


\"代表一個(gè)雙引號(hào)字符


原字符,不希望字符串中的轉(zhuǎn)義字符起作用。就使用原字符,就是在字符串之前加上r,或R


注意事項(xiàng),最后一個(gè)字符不能是反斜杠


保留字查看


我的保留字:有一些單詞被我賦予了特定的意義,


這些單詞你在給你的任何對(duì)象起名字的時(shí)候都不能用


import keyword


print(keyword.kwlist)


我的規(guī)則你必須要知道


·變量、函數(shù)、類、模塊和其它對(duì)象的起的名字就叫標(biāo)識(shí)符


·規(guī)則:


? ? ·宇母、數(shù)宇、下劃線


·不能以數(shù)字開頭


·不能是我的保留字


·我是嚴(yán)格區(qū)分大小寫的


變量的定義和使用


變量由三部分組成


標(biāo)識(shí):表示對(duì)象所存儲(chǔ)的內(nèi)存地址,使用內(nèi)置函數(shù)id(obj)來獲取


類型:表示的是對(duì)象的數(shù)據(jù)類型,使用內(nèi)置函數(shù)type(obj)來獲取


值:表示對(duì)象所存儲(chǔ)的具體數(shù)據(jù),使用print(obj)可以將值進(jìn)行打印輸出


當(dāng)多次賦值之后,變量名會(huì)指向新的空間


數(shù)據(jù)類型


常用的數(shù)據(jù)類型


整數(shù)類型 ——>int ——>98


浮點(diǎn)數(shù)類型——>float——>3.14159


布爾類型——>bool——>True,False


字符串類型——>str——>'人聲苦短,我永Python'


數(shù)據(jù)可以表示為二進(jìn)制,十進(jìn)制,八進(jìn)制,十六進(jìn)制


print('十進(jìn)制',118)


print('二進(jìn)制',0b10101111)


print('八進(jìn)制',0o176)八進(jìn)制以0o開頭


print('十六進(jìn)制'0x1EAF)


浮點(diǎn)類型


浮點(diǎn)數(shù)整數(shù)部分和小數(shù)部分組成


浮點(diǎn)數(shù)存儲(chǔ)不精確性


使用浮點(diǎn)數(shù)進(jìn)行計(jì)算時(shí),可能會(huì)出現(xiàn)小數(shù)位數(shù)不確定的情況


布爾類型


用來表示真或假的值


True表示真,F(xiàn)alse表示假


布爾值可以轉(zhuǎn)化為整數(shù)


True——>1


False——>0


字符串類型


字符串又稱為不可變的字符序列


可以使用單引號(hào)''雙引號(hào)""三引號(hào)''' '''或""" """來定義


單引號(hào)和雙引號(hào)定義的字符串必須在一行


三引號(hào)定義的字符串可以分布在連續(xù)的多行


Python中的注釋


注釋


·在代碼中對(duì)代碼的功能進(jìn)行解釋說明的標(biāo)注性文字,


可以提高代碼的可讀性


·注釋的內(nèi)容會(huì)被Python解釋器忽略


·通常包括三種類型的注釋


·單行注釋——〉以“#”開頭,直到換行結(jié)束


·多行注釋——>并沒有單獨(dú)的多行注釋標(biāo)記,將一對(duì)三引號(hào)之間的代碼稱為多行注釋


·中文編碼聲明注釋——>在文件開頭加上中文聲明注釋,用以指定源碼文件的編碼格式


''' 多行注釋'''


算術(shù)運(yùn)算符


+加法運(yùn)算


-減法運(yùn)算


*乘法運(yùn)算


/除法運(yùn)算


//整除運(yùn)算


一正一負(fù)向下取整?


%


(有負(fù)數(shù))求余? 余數(shù)=被除數(shù)-除數(shù)*商


賦值運(yùn)算符


+=,-=,*=,/=,//=,%=


支持系列解包賦值


a,b,c=20,30,40


比較運(yùn)算符,比較運(yùn)算符的結(jié)果為bool類型


比較對(duì)象的表示使用is


比如a=10 id=120


b=10 id=120


a is b? ? true


is not表示a與b的標(biāo)識(shí)id不相等所以false


a is not b 為false


布爾運(yùn)算符


and并且? ? ? 有一個(gè)false就為false


or或者 有一個(gè)true就是true


not 對(duì)bool類型操作數(shù)取反


in 與not in


s='helloworld'


print('w' in s)w在s的變量的字符串里是對(duì)的


print('k' in s)k不在s變量的字符串里是錯(cuò)的


print('w' not in s)False


print('k'not in s)k不在s變量的字符串里就是對(duì)的


位運(yùn)算符


將數(shù)據(jù)轉(zhuǎn)成二進(jìn)制進(jìn)行計(jì)算


位與&,對(duì)應(yīng)數(shù)位都是1,結(jié)果數(shù)位才是1,否則為0


位或|,對(duì)應(yīng)數(shù)位都是0,結(jié)果數(shù)位才是0,否則為1


左移位運(yùn)算符<<,高位溢出舍棄,低位補(bǔ)0


右移位運(yùn)算符>>,低位溢出舍棄,高位補(bǔ)0


print(4<<1)向左移動(dòng)一位相當(dāng)于乘以2


print(4>>2)向右移動(dòng)2位相當(dāng)于除以4?


Python中的運(yùn)算符


運(yùn)算符優(yōu)先級(jí)


先是算術(shù)運(yùn)算符


后是位運(yùn)算,再后是比較運(yùn)算符,布爾運(yùn)算符


順序結(jié)構(gòu)


程序從上到下順序地執(zhí)行代碼,中間沒有任何的判斷和跳轉(zhuǎn),直到程序結(jié)束


對(duì)象的布爾值


Python一切皆對(duì)象,所有對(duì)象都有一個(gè)布爾值


獲取對(duì)象的布爾值


使用內(nèi)置函數(shù)bool()


以下對(duì)象的布爾值為False


False


數(shù)值0


None


空字符串


空列表


空元組


空字典


空集合


單分支結(jié)構(gòu)


語法結(jié)構(gòu)


if 條件表達(dá)式:


條件執(zhí)行體


雙分支結(jié)構(gòu)


if 條件表達(dá)式:


條件執(zhí)行體


else 條件表達(dá)式:


條件執(zhí)行體


if 條件表達(dá)式1:


條件執(zhí)行體1


elif 條件表達(dá)式2:


條件執(zhí)行體2


elif 條件表達(dá)式N:


條件執(zhí)行體N


[else:]


條件表達(dá)式N+1


嵌套if


語法結(jié)構(gòu):


if條件表達(dá)式1:


if內(nèi)層條件表達(dá)式:


內(nèi)層條件執(zhí)行體1


else:


內(nèi)存條件執(zhí)行體2


else:


條件執(zhí)行體


條件表達(dá)式


條件表達(dá)式是if......else的簡寫


語法結(jié)構(gòu):


x if? ? 判斷條件 else y


運(yùn)算規(guī)則


如果判斷條件的布爾值為True。條件表達(dá)式的返回值為x。否則條件表達(dá)式的返回值為False


pass語句


pass語句


語句什么都不做,只是一個(gè)占位符,用在語法上需要語句的地方


什么時(shí)候使用:


先搭建語法結(jié)構(gòu),還沒想好代碼怎么寫的時(shí)候


哪些語句一起使用


if語句的條件執(zhí)行體


for-in語句的循環(huán)體


定義函數(shù)時(shí)的函數(shù)體


內(nèi)置函數(shù)range()


創(chuàng)建range對(duì)象的三種方式


range(stop)——>創(chuàng)建一個(gè)(0,stop)之間的整數(shù)序列,步長為1


range(start,stop)——>創(chuàng)建一個(gè)[start,stop)之間的整數(shù)序列,步長為1


range(start,stop,step)——>創(chuàng)建一個(gè)[start,stop)之間的整數(shù)序列,步長為step


range類型的優(yōu)點(diǎn):不管range對(duì)象表示的整數(shù)序列有多長,所有range對(duì)象占用的


內(nèi)存空間都是相同的,因?yàn)閮H僅需要存儲(chǔ)start,stop和step,只有當(dāng)用到range對(duì)象時(shí),


才會(huì)去計(jì)算序列中的相關(guān)元素


循環(huán)結(jié)構(gòu)


反復(fù)做同一件事情的情況,稱為循環(huán)


循環(huán)結(jié)構(gòu)的流程圖


循環(huán)的分類


while


for -in


語法結(jié)構(gòu)


while 條件表達(dá)式:


條件執(zhí)行體(循環(huán)體)


選擇結(jié)構(gòu)的if與循環(huán)結(jié)構(gòu)while的區(qū)別


If是判斷一次,條件為True執(zhí)行一行


while是判斷N+1次,條件為True執(zhí)行N次


for-in循環(huán)


in表達(dá)從(字符串、序列等)中依次取值,又稱為遍歷


for-in遍歷的對(duì)象必須是可迭代對(duì)象


for-in的語法結(jié)構(gòu)


for自定義的變量in可迭代對(duì)象:循環(huán)體


for-in的執(zhí)行圖


循環(huán)體內(nèi)不需要訪問自定義變量,可以將自定義變量替代為下劃線


?流程控制語句break


break語句用于結(jié)束循環(huán)結(jié)構(gòu),通常與分支結(jié)構(gòu)if一起使用


流程控制語句continue


continue語句


勇于結(jié)束當(dāng)前循環(huán),進(jìn)入下一次循環(huán),通常與分支結(jié)構(gòu)中的if一起使用


列表


為什么需要列表


變量可以存儲(chǔ)一個(gè)元素,而列表是一個(gè)"大容器"可以存儲(chǔ)N多個(gè)元素,


程序可以方便地對(duì)這些數(shù)據(jù)進(jìn)行整體操作


列表相當(dāng)于其他語言中的數(shù)組


列表的創(chuàng)建


列表需要使用中括號(hào)[]元素之間使用英文的逗號(hào)進(jìn)行分隔


列表的創(chuàng)建方式


使用中括號(hào)


使用內(nèi)置函數(shù)list()


lst=['大圣','額額']


lst2=(['大圣','額額'])


列表的特點(diǎn)


列表元素按順序有序排序


索引映射唯一個(gè)數(shù)據(jù)


列表可以存儲(chǔ)重復(fù)數(shù)據(jù)


任意數(shù)據(jù)類型混存


根據(jù)需要?jiǎng)討B(tài)分配和回收內(nèi)存


列表的查詢操作


獲取列表中指定元素的索引


index()如查列表中存在N個(gè)相同元素,只返回相同元素中的第一個(gè)元素的索引


如果查詢的元素在列表中不存在,則會(huì)拋出ValueError


還可以在指定的start和stop之間進(jìn)行查找


獲取列表中的單個(gè)元素獲取單個(gè)元素


正向索引從0到N-1? ?舉例:lst[0]


逆向索引從-N到-1? ?舉例:lst[-N]


指定索引不存在,則拋出IndexError


獲取元素的查詢操作


獲取列表中的多個(gè)元素


語法格式


列表名[start:stop:step]


切片的結(jié)果——>原列表片段的拷貝


切片的范圍[start,stop]


step默認(rèn)為1——>簡寫為[start:stop]


step為正數(shù)[:stop:step]切片的第一個(gè)元素默認(rèn)是列表的第一個(gè)元素 從start開始往后計(jì)算切片


step為正數(shù)[stop::step]切片的最后一個(gè)元素默認(rèn)是列表的最后一個(gè)元素 從start開始往后計(jì)算切片


step為負(fù)數(shù)[:stop:step]切片的第一個(gè)元素默認(rèn)是列表的最后一個(gè)元素 從start開始往前計(jì)算切片


step為負(fù)數(shù)[stop::step]切片的最后一個(gè)元素默認(rèn)是列表的第一個(gè)元素 從start開始往前計(jì)算切片


列表元素的查詢操作


判斷指定元素在列表中是否存在


元素 in 列表名


元素 not in 列表名


列表元素的遍歷


for 迭代遍歷 in 列表名:


列表元素的增加操作


列表元素的增加操作


append()在列表的末尾添加一個(gè)元素


extend()在列表的末尾至少添加一個(gè)元素


insert()在列表的任意位置添加一個(gè)元素


切片在列表的任意位置添加至少一個(gè)元素


列表元素的刪除操作


列表元素的刪除操作


remove()


一次刪除一個(gè)元素


重復(fù)元素只刪除第一個(gè)


元素不存在拋出ValueError


pop()


刪除一個(gè)指定索引位置上的元素


指定索引不存在拋出IndeError


不知道索引,刪除列表中最后一個(gè)元素


切片 一次至少刪除一個(gè)元素


clear()清空列表中的所有元素


del 刪除列表


列表元素的修改操作


列表元素的修改操作


為指定索引的元素賦予一個(gè)新值


為指定的切片賦予一個(gè)新值


列表元素的排序操作


常見的兩種方式


用sort()方法,列有中的所有元素默認(rèn)按照從小到大的順序進(jìn)行排序


,可以指定reverse=True進(jìn)行降序排序


調(diào)用內(nèi)置函數(shù)sorted(),可以指定reverse=True,進(jìn)行降序排序,


生成一個(gè)新的列表對(duì)象,原列表不發(fā)生改變


列表生成式


列表生成式簡稱"生成列表的公式"


語法格式:


i*i for i in range(1,10)


注意事項(xiàng):"表示列表元素的表達(dá)式"中通常包含自定義變量


列表中的元素的值為2,4,6,8,10


lst2=[i*2 for i in range(1,6)]


print(lst2)


字典


Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,與列表一樣是一個(gè)可變序列


以鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù),字典是一個(gè)無序的序列


字典的實(shí)現(xiàn)原理


字典的實(shí)現(xiàn)原理與查字典類似,查字典是先根據(jù)部首或拼音查找


應(yīng)的頁碼,Python中的字典是根據(jù)key查找value所在的位置


字典的創(chuàng)建


字典的創(chuàng)建


最常用的方式:使用花括號(hào)


scores{'張三':100,'李四':98,'王五':45}


使用內(nèi)置函數(shù)dict()


dict(name='jack',age=20)


[]取值與使用get()取值的區(qū)別


[]如果字典中不存在指定的key,拋出keyError異常


get()方法取值,如果字典中不存在指定的key,并不會(huì)拋出KeyError而是返回None


,可以通過參數(shù)設(shè)置默認(rèn)的value,以便指定的key不存在時(shí)返回


字典的常用操作


key的判斷


key的判斷


in 指定的key在字典中存在返回True——>'張三'in scores


not in 指定的key在字典中不存在返回True——>'Marry' not in scores


字典元素的刪除


del scores['張三']


字典元素的新增


scores['Jack']=90


字典的常用操作


獲取字典視圖的三個(gè)方法


獲取字典視圖


keys()——>獲取字典中所有key


values()——>獲取字典中所有value


items()——>獲取字典中所有key,value對(duì)


字典的常用操作


字典元素的遍歷


for item in scores:


print(item)


字典的特點(diǎn)


字典中的所有元素都是一個(gè)key-value對(duì),key不允許重復(fù),value可以重復(fù)


字典中的元素是無序的


字典中的key必須是不可變對(duì)象


字典也可以根據(jù)需要?jiǎng)討B(tài)地伸縮


字典會(huì)浪費(fèi)較大的內(nèi)存,是一種使用空間換時(shí)間的數(shù)據(jù)結(jié)構(gòu)


字典生成式


內(nèi)置函數(shù)zip()


用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)元組,


然后返回由這些元組組成的列表


items=['Fruits','Books','0thers']?


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)之一,是一個(gè)不可變序列


不可變序列與可變序列


不變可變序:字符串、元組


不變可變序列:沒有增、刪,改的操作


可變序列:列表、字典


可變序列:可以對(duì)序列執(zhí)行增、刪、改操作,對(duì)象地址不發(fā)生更改


元組的創(chuàng)建方式


元組的創(chuàng)建方式


直接小括號(hào)t=(Python;‘hello',90)


使用內(nèi)置函數(shù)tuple()


t=tuple((“Python',hello',90))·


只包含一個(gè)元組的元素需要使用逗號(hào)和小括號(hào)


t=(10,)


為什么要將元組設(shè)計(jì)成不可變序列


為什么要將元組設(shè)計(jì)成不可變序列


在多任務(wù)環(huán)境下,同時(shí)操作對(duì)象時(shí)不需要加鎖


因此,在程序中盡量使用不可變序列


·注意事項(xiàng):元組中存儲(chǔ)的是對(duì)象的引用


a)如果元組中對(duì)象本身不可對(duì)象,則不能再引用其它對(duì)象


b)如果元組中的對(duì)象是可變對(duì)象,則可變對(duì)象的引用不允許


改變,但數(shù)據(jù)可以改變


元組的遍歷


·元組是可迭代對(duì)象,所以可以使用for..in進(jìn)行遍歷


t=('Python','world',98)


for item in t:


print(item)


什么是集合


集合


·Python語言提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu)


·與列表、字典樣都屬于可變類型的序列


·集合是沒有value的字典


集合的創(chuàng)建方式


集合的創(chuàng)建方式


直接{}


s={'world','hello',90}


使用內(nèi)置函數(shù)set()


集合中的元素不允許重復(fù)


集合中的元素是無序的


集合的相關(guān)操作


集合元素的判斷操作


in或not in


集合元素的新增操作


調(diào)用add()方法,一次添中一個(gè)元素


調(diào)用update()方法至少添加一個(gè)元素


集合元素的刪除操作


調(diào)用remove()方法,一次刪除一個(gè)指定元素,如果指定的元素不存在拋出


KeyError


調(diào)用discard()方法,一次刪除一個(gè)指定元素,如果指定的元素不存在不拋出異常


調(diào)用pop()方法,一次只刪除一個(gè)任意元素


調(diào)用clear()方法,清空集合


集合間的關(guān)系


兩個(gè)集合是否相等


可以使用運(yùn)算符==或!=進(jìn)行判斷


一個(gè)集合是否是另一個(gè)集合的子集


可以調(diào)用方法issubset進(jìn)行判斷


B是A的子集


一個(gè)集合是否是另一個(gè)集合的超集


可以調(diào)用方法issuperset進(jìn)行判斷


A是B的超集


兩個(gè)集合是否沒有交集


可以調(diào)用方法isdisjoint進(jìn)行判斷


intersection()與&等價(jià),交集操作


union與|等價(jià),并集操作


difference與-等價(jià),差集操作


symmetric_difference與^符號(hào)等價(jià),對(duì)稱差集操作


列表生成式


lst=[i*i for i in range(6)]


print(lst)


集合生成式


s={i*I for i in range(6)}


print(s)


字符串的駐留機(jī)制


字符串


在Python中字符串是基本數(shù)據(jù)類型,是一個(gè)不可變的字符序列


什么叫字符串駐留機(jī)制呢?


僅保存一份相同且不可變字符串的方法,


不同的值被存放在字符串的駐留池中,


Python的駐留機(jī)制對(duì)相同的字符串只保留一份拷貝,后續(xù)創(chuàng)建相同字符串時(shí),


不會(huì)開辟新空間,而是把該字符串的地址賦給新創(chuàng)建的變量


字符串的駐留機(jī)制


駐留機(jī)制的幾種情況(交互模式)


字符串的長度為0或1時(shí)


符合標(biāo)識(shí)符的字符串


字符串只在編譯時(shí)進(jìn)行駐留,而非運(yùn)行


時(shí)[-5,256]之間的整數(shù)數(shù)字


sys中的intern方法強(qiáng)制2個(gè)字符串指向同一個(gè)對(duì)象


PyCharm對(duì)字符串進(jìn)行了優(yōu)化處理


字符串駐留機(jī)制的優(yōu)缺點(diǎn)


·當(dāng)需要值相同的字符串時(shí),


可以直接從字符串池里拿來使用,


避免頻繁的創(chuàng)建和銷毀,提升效率和節(jié)約內(nèi)存,


因此拼接字符串和修改字符串是會(huì)比較影響性能的。


在需要進(jìn)行字符串拼接時(shí)建議使用str類型的join方法,


而非+,因?yàn)閖oin()方法是先計(jì)算出所有字符中的長度,


然后再拷貝,只new一次對(duì)象,效率要比"+”效率高


字符串的查詢操作的方法


查詢方法


index() 查找子串substr第一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則拋出ValueError


rindex()查找子串substr最后一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則拋出ValueError


find()查找子串substr第一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則返回-1


rfind()查找子串substr最后一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則返回-1


·字符串的大小寫轉(zhuǎn)換操作的方法


大小寫轉(zhuǎn)換


upper()把字符串中所有字符都轉(zhuǎn)成大寫字母? 轉(zhuǎn)換成大寫之后會(huì)產(chǎn)生一個(gè)新的字符串對(duì)象


lower()把字符串中所有字符都轉(zhuǎn)成小寫字母? 轉(zhuǎn)換成小寫之后會(huì)產(chǎn)生一個(gè)新的字符串對(duì)象


swapcase()把字符串中所有大寫字母轉(zhuǎn)成小寫字母,把所有小寫字母都轉(zhuǎn)成大寫字母


capitalize()把第一個(gè)字符轉(zhuǎn)換為大寫,把其余字符轉(zhuǎn)換為小寫


title()把每個(gè)單詞的第一個(gè)字符轉(zhuǎn)換為大寫,把每個(gè)單詞的剩余字符轉(zhuǎn)換為小寫


字符串的常用操作


·字符串內(nèi)容對(duì)齊操作的方法


字符串對(duì)齊


center()


居中對(duì)齊,第1個(gè)參數(shù)指定寬度,第2個(gè)參數(shù)指定填充符,


第2個(gè)參數(shù)是可選的,默認(rèn)是空格


,如果設(shè)置寬度小于實(shí)際寬度則則返回原字符串


ljust()


左對(duì)齊,第1個(gè)參數(shù)指定寬度,第2個(gè)參數(shù)指定填充符,第2個(gè)參數(shù)是可選的,


默認(rèn)是空格如果設(shè)置寬度小于實(shí)際寬度則則返回原字符串


rjust()


右對(duì)齊,第1個(gè)參數(shù)指定寬度,第2個(gè)參數(shù)指定填充符,第2個(gè)參數(shù)是可選的,


默認(rèn)是空格如果設(shè)置寬度小于實(shí)際寬度則則返回原字符串


zfill()


右對(duì)齊,左邊用0填充,該方法只接收一個(gè)參數(shù),用于指定字符串的寬度,


如果指定的寬度小于等于字符串的長度,返回字符串本身


字符串劈分操作的方法


字符串的劈分


split()


從字符串的左邊開始劈分,默認(rèn)的劈分字符是空格字符串,返回的值都是一個(gè)列表


以通過參數(shù)sep指定劈分字符串是的劈分符


通過參數(shù)maxsplit指定劈分字符串時(shí)的最大劈分次數(shù),


在經(jīng)過最大次劈分之后,剩余的子串會(huì)單獨(dú)做為一部分


rsplit()


從字符串的右邊開始劈分,默認(rèn)的劈分字符是空格字符串,返回的值都是一個(gè)列表


以通過參數(shù)sep指定劈分字符串是的劈分符


通過參數(shù)maxsplit指定劈分字符串時(shí)的最大劈分次數(shù),


在經(jīng)過最大次劈分之后,剩余的子串會(huì)單獨(dú)做為一部分


判斷字符串操作的方法


判斷字符串的方法


isidentifier()判斷指定的字符串是不是合法的標(biāo)識(shí)符


isspace()判斷指定的字符串是否全部由空白字符組成(回車、換行,水平制表符)


isalpha()判斷指定的字符串是否全部由字母組成


isdecimal()判斷指定字符串是否全部由十進(jìn)制的數(shù)字組成


isnumeric()判斷指定的字符串是否全部由數(shù)字組成


isalnum()判斷指定字符串是否全部由字母和數(shù)字組成


字符串操作的其它方法


字符串替換


replace()作用:


第1個(gè)參數(shù)指定被替換的子串,


第2個(gè)參數(shù)指定替換子串的字符串,該方法返回替換后得到的字符串,


替換前的字符串不發(fā)生變化,


調(diào)用該方法時(shí)可以通過第3個(gè)參數(shù)指定最大替換次數(shù)


字符串的合并


join()


將列表或元組中的字符串合并成一個(gè)字符串


字符串的比較操作


運(yùn)算符:>,>=,<,<=,==,!=


比較規(guī)則:首先比較兩個(gè)字符串中的第一個(gè)字符,


如果相等則繼續(xù)比較下一個(gè)字符,依次比較下去,直到兩個(gè)字符串中的字符不相等時(shí),


其比較結(jié)果就是兩個(gè)字符串的比較結(jié)果,兩個(gè)字符串中的所有后續(xù)字符將不再被比較


比較原理:兩上字符進(jìn)行比較時(shí),比較的是其ordinal value(原始值),


調(diào)用內(nèi)置函數(shù)ord可以得到指定字符的ordinal value。


與內(nèi)置函數(shù)ord對(duì)應(yīng)的是內(nèi)置函數(shù)chr,


調(diào)用內(nèi)置函數(shù)chr時(shí)指定ordinal value可以得到其對(duì)應(yīng)的字符


字符串的切片操作


字符串是不可變類型


·不具備增、刪、改等操作


·切片操作將產(chǎn)生新的對(duì)象


s='hello,Python'


s1=s[:5]由于沒有指定起始位置,所以從0開始切


s2=s[6:]由于沒有指定結(jié)束位置,所以切到字符串最后一個(gè)元素


s3='!'


newstr=s1+s3+s2


切片操作[start:end:step]


print(s[1:5:1])#從1開始截到5(不包含5),步長為1


print(s[::2])#默認(rèn)從0開始,沒有寫結(jié)束,默認(rèn)到字符串的最后一個(gè)元素,步長為2,兩個(gè)元素之間的索引間隔為2


print(s[::-1])#默認(rèn)從字符串的最后一個(gè)元素開始,到字符串的第一個(gè)元素結(jié)束,因?yàn)椴介L為負(fù)數(shù)


print(s[-6::1])#從素引為-6開始,到寧符串的最后一個(gè)元素結(jié)束,步長為1


格式化字符串


格式化字符串的兩種方式


%作占位符


print(’我叫%s,今年%d歲’%(name,age))


{}作占位符


print'我叫{0},今年{1}歲’.format(name,age))


f-string


print(f'我叫{name},今年{age}歲')


%d是指寬度例如print('%10d'% 99) 10表示寬度


%f是表示保留小數(shù),print('%.3f'%3.1415926)? ?.3表示是小數(shù)點(diǎn)后三位


同時(shí)表示寬度和精度


print('%10.3f' %3.1415926) 一共總寬度為10,小數(shù)點(diǎn)后3位


print('{0:.3}'.format(3.1415926))#.3表示的是一共是3位數(shù)


print'{0.3f}'.format(3.1415926))#.3f表示是3位小數(shù)


print({:10.3f)'.format(3.1415926))#同時(shí)設(shè)置寬度和精度,一共是10位,3位是小數(shù)


字符串的編碼轉(zhuǎn)換


·為什么需要字符串的編碼轉(zhuǎn)換


編碼與解碼的方式


·編碼:將字符串轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)(bytes)


·解碼:將bytes類型的數(shù)據(jù)轉(zhuǎn)換成字符串類型


s='天涯共此時(shí)’


#編碼


print(s.encode(encoding='GBK'))#在GBK這種編碼格中一個(gè)中文占兩個(gè)字節(jié)


print(s.encode(encoding='UTF-8'))#在UTF-8這種編輯格式中,一個(gè)中文占三個(gè)字節(jié)


#解碼?


#byte代表就是一個(gè)二進(jìn)制數(shù)據(jù)(字節(jié)類型的數(shù)據(jù))


?byte=s.encode(ncoding='GBK')#偏碼


?print(byte,decode(encoding='GBK'))#解碼


byte=s.encode(encoding='UTF-8')?


print(byte.decode(encoding='UTF-8'))


函數(shù)


什么是函數(shù)


函數(shù)就是執(zhí)行特定任和以完成特定功能的一段代碼


? ? 為什么需要


函數(shù)


·復(fù)用代碼


·隱藏實(shí)現(xiàn)細(xì)節(jié)


·提高可維護(hù)性


·提高可讀性便于調(diào)試


函數(shù)的創(chuàng)建


def 函數(shù)名([輸入?yún)?shù)]):


? ? 函數(shù)體


[return xxx]


函數(shù)的返回值


函數(shù)返回多個(gè)值時(shí),結(jié)果為元組


函數(shù)的返回值


(1)如果函數(shù)沒有返回值【函數(shù)執(zhí)行完畢之后,不需要給調(diào)用處提供數(shù)據(jù)】return可以省略不寫


(2)函數(shù)的返回值,如果是1個(gè),直接返回類型


(3)函數(shù)的返回值,如果是多個(gè),返回的結(jié)果為元組


函數(shù)在定義時(shí),是否需要返回值,視情況而定


函數(shù)的參數(shù)定義


函數(shù)定義默認(rèn)值參數(shù)


·函數(shù)定義時(shí),給形參設(shè)置默認(rèn)值,只有與默認(rèn)值不符的時(shí)候才需要傳遞實(shí)參


函數(shù)的參數(shù)定義


個(gè)數(shù)可變的位置參數(shù)


定義函數(shù)時(shí),可能無法事先確定傳遞的位置實(shí)參的個(gè)數(shù)時(shí),使用可變的


位置參數(shù)


使用*定義個(gè)數(shù)可變的位置形參


結(jié)果為一個(gè)元組


個(gè)數(shù)可變的關(guān)鍵字形參


定義函數(shù)時(shí),無法事先確定傳遞的關(guān)鍵字實(shí)參的個(gè)數(shù)時(shí),使用可變的關(guān)


鍵字形參


使用**定義個(gè)數(shù)可變的關(guān)鍵字形參


結(jié)果為一個(gè)字典


函數(shù)個(gè)數(shù)可變的位置參數(shù),只能是1個(gè)


個(gè)數(shù)可變的關(guān)鍵字參數(shù),只能是1個(gè)


在一個(gè)函數(shù)的定義過程中,既有個(gè)數(shù)可變的關(guān)鍵字形參,也有個(gè)數(shù)可變的位置形參,


要求,個(gè)數(shù)可變的位置形參,放在個(gè)數(shù)可變的關(guān)鍵字形參之前


變量的作用域


變量的作用域


·程序代碼能訪問該變量的區(qū)域


·根據(jù)變量的有效范圍可分為


·局部變量


·在函數(shù)內(nèi)定義并使用的變量,只在函數(shù)內(nèi)部有效,局部變量使用global聲明,這個(gè)變量就會(huì)就成全局變量


全局變量


·函數(shù)體外定義的變量,可作用于函數(shù)內(nèi)外


global age #函數(shù)內(nèi)部定義的變量,局部變量,局部變量使用global聲明,這個(gè)變量實(shí)際上就變成了全局變量


遞歸函數(shù)


什么是遞歸函數(shù)


·如果在一個(gè)函數(shù)的函數(shù)體內(nèi)調(diào)用了該函數(shù)本身,這個(gè)函數(shù)就稱為遞歸函數(shù)


遞歸的組成部分


·遞歸調(diào)用與遞歸終止條件


遞歸的調(diào)用過程


·每遞歸調(diào)用一次函數(shù),都會(huì)在棧內(nèi)存分配一個(gè)棧幀,


·每執(zhí)行完一次函數(shù),都會(huì)釋放相應(yīng)的空間


遞歸的優(yōu)缺點(diǎn)


·缺點(diǎn):占用內(nèi)存多,效率低下


·優(yōu)點(diǎn):思路和代碼簡單


Bug的由來


·世界上第一部萬用計(jì)算機(jī)的進(jìn)化版-馬克2號(hào)(Mark I)


Bug的常見類型


·粗心導(dǎo)致錯(cuò)誤的自查寶典


1.漏了末尾的冒號(hào),如if語句,循環(huán)語句,else子句等


2.縮進(jìn)錯(cuò)誤,該縮進(jìn)的沒縮進(jìn),不該縮進(jìn)的瞎縮進(jìn)


3.把英文符號(hào)寫成中文符號(hào),比如說:引號(hào),冒號(hào),括號(hào)


4.字符串拼接的時(shí)候,把字符串和數(shù)字拼在一起


5.沒有定義變量,比如說while的循環(huán)條件的變量


6.“=="比較運(yùn)算符和”=”賦值運(yùn)算符的混用


Bug的常見類型


·被動(dòng)掉坑問題的解決方案


·Python提供了異常處理機(jī)制,可以在異常出現(xiàn)時(shí)即


時(shí)捕獲,然后內(nèi)部“消化”,讓程序繼續(xù)運(yùn)行


異常處理


try:


代碼塊


except:


輸出語句


Python的異常處理機(jī)制


·多個(gè)except結(jié)構(gòu)·捕獲異常的順序按照先子類后父親類的順序,


為了避免遺漏可能出現(xiàn)的異常,可以在最后增加BaseException


try...except...else結(jié)構(gòu)


·如果try塊中沒有拋出異常,則執(zhí)行else塊,


如果try中拋出異常except塊


try...except...else...finally結(jié)構(gòu)


finally塊無論是否發(fā)生異常都會(huì)被執(zhí)行,


能常用來釋放try塊中申請(qǐng)的資源


Python中常見的異常類型


異常類型? ? ? ? ? ? ? ? ? ? ? ? ?描述


ZeroDivisionError? ? ? ? ? 除(或取模)零(所有數(shù)據(jù)類型)


IndexError? ? ? ? ? ? ? ? ? ? ? 序列中沒有此索引( index)


KeyError? ? ? ? ? ? ? ? ? ? ? ? ?映射中沒有這個(gè)鍵


NameError? ? ? ? ? ? ? ? ? ? ?未聲明/初始化對(duì)象(沒有屬性)


SyntaxError? ? ? ? ? ? ? ? ? ? Python 語法錯(cuò)誤


ValueError? ? ? ? ? ? ? ? ? ? ? 傳入無效的參數(shù)


traceback模塊


使用traceback模塊打印異常信息


traceback.print_exc()


斷點(diǎn)程序運(yùn)行到此處,暫時(shí)掛起,停止執(zhí)行。


此時(shí)可以詳細(xì)觀察程序的運(yùn)行情況,方便做出進(jìn)一步的判斷


進(jìn)入調(diào)試視圖進(jìn)入調(diào)試視圖的三種方式


(1)單擊工具欄上的按鈕卷


(2)右鍵單擊編輯區(qū):點(diǎn)擊: debug'模塊名


(3)快捷鍵: shift+F9


·類是多個(gè)類似事物組成的群體的統(tǒng)稱。


能夠幫助我們快速理解和判斷事物的性質(zhì)


·數(shù)據(jù)類型


·不同的數(shù)據(jù)類型屬于不同的類


·使用內(nèi)置函數(shù)查看數(shù)據(jù)類型


·對(duì)象·100、99、520都是int類之下包含的相似的不同個(gè)例,


這個(gè)個(gè)例專業(yè)數(shù)語稱為實(shí)例或?qū)ο?/p>


類的創(chuàng)建


class 類名:#類名每個(gè)單詞的首字母大寫,其余小寫


pass


類的組成


·類屬性#直接寫在類里的變量稱為類屬性


·實(shí)例方法


def eat(self)


print('實(shí)力方法括號(hào)要寫self')


·靜態(tài)方法


@staticmethod


def method():


print('')


·類方法


@classmethod


def cm(cls):


print('類方法')


在類之外定義的稱為函數(shù),在類之內(nèi)定義的稱為方法


靜態(tài)方法


@staticmethod


@classmethod


def init (self, name, age):


self.name=name #se1f.name稱為實(shí)體屬性個(gè)賦值的操作


,將局部變量的name的值賦給實(shí)體屬性


self. age=age


對(duì)象的創(chuàng)建


對(duì)象的創(chuàng)建又稱為類的實(shí)體化


語法:


實(shí)體名=類名


例子:


#創(chuàng)建 Student類的實(shí)例對(duì)象


stu=Student('Jack', 20)?


print(stu.name)#實(shí)例屬性?


print(stu.age)#實(shí)例屬性?


stu. info()實(shí)例方法


意義:有了實(shí)例,就可以調(diào)用類中的內(nèi)容


類屬性、類方法、靜態(tài)方法


類屬性:類中方法外的變量稱為類屬性,被該類的所有對(duì)象所共享


類方法:使用@ classmethod修飾的方法,使用類名直接訪問的方法


靜態(tài)方法:使用@ staticmethod修飾的主法,使用類名直接訪問的方法


動(dòng)態(tài)綁定屬性和方法


Python是動(dòng)態(tài)語言,在創(chuàng)建對(duì)象之后,可以動(dòng)態(tài)地綁定屬性和方法


def show():


print('我是一函數(shù)')


?stu=Student('Jack', 20)


stu. gender=男#態(tài)綁定性別


print(stu. name, stu age, stu gender)


stu.show=show#動(dòng)態(tài)綁定方法


stu show()


面向?qū)ο蟮娜筇卣?/p>


封裝:提高程序的安全性·將數(shù)據(jù)(屬性)和行為(方法)包裝到類對(duì)象中。


在方法內(nèi)部對(duì)屬性進(jìn)行操作,在類對(duì)象的外部調(diào)用方法。


這樣無需關(guān)心方法內(nèi)部的具體實(shí)現(xiàn)細(xì)節(jié),從而隔離了復(fù)雜度在 Python中沒有


專門的修飾符用于屬性的私有,如果該屬性不希望在類對(duì)象外部被訪問,


前邊使用兩個(gè)“”。


繼承:提高代碼的復(fù)用性


多態(tài):提高程序的可擴(kuò)展性和可維護(hù)性


self.__age=age#年齡不希望在類的外部被使用,所以加了兩個(gè)_


stu.show()


#在類的外使用使用name與age


print(stu._Student__age)#在類的外部可以通過_Student__age


繼承


語法格式


? ? class子類類名(父類1,父類2..):


? ? pass


如果一個(gè)類沒有繼承任何類,則默認(rèn)繼承 object


Python支持多繼承


定義子類時(shí),必須在其構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù)


方法重寫


如果子類對(duì)繼承自父類的某個(gè)屬性或方法不滿意,可以在子類中對(duì)其(方法體)進(jìn)行重新編寫


子類重寫后的方法中可以通過super(.Xx)調(diào)用父類中被重寫的方法


object類


object類是所有類的父類,因此所有類都有 object類的屬性和方法


內(nèi)置函數(shù)dir()可以查看指定對(duì)象所有屬性


Object有一個(gè)st(方法,用于返回一個(gè)對(duì)于"對(duì)象的描述",


對(duì)應(yīng)于內(nèi)置函數(shù)str()經(jīng)常用于print()方法,幫我們查看對(duì)象的信息,


所以我們經(jīng)常會(huì)對(duì)__str__()進(jìn)行重寫


多態(tài)


簡單地說,多態(tài)就是“具有多種形態(tài)”,它指的是:即便不知道一個(gè)變量所引用的


對(duì)象到底是什么類型,仍然可以通過這個(gè)變量調(diào)用方法,在運(yùn)行過程中根據(jù)變量


所引用對(duì)象的類型,動(dòng)態(tài)決定調(diào)用哪個(gè)對(duì)象中的方法


靜態(tài)語言和動(dòng)態(tài)語言關(guān)于多態(tài)的區(qū)別


靜態(tài)語言實(shí)現(xiàn)多態(tài)的三個(gè)必要條件


繼承


方法重寫


父類引用指向子類對(duì)象


動(dòng)態(tài)語言的多態(tài)崇尚“鴨子類型"當(dāng)看到一只鳥走起來像鴨子、


游泳起來像鴨子收起來也像鴨子,那么這只鳥就可以被稱為鴨子。


在鴨子類型中,不需要關(guān)心對(duì)象是什么類型,到底是不是鴨子,只關(guān)心對(duì)象的行為。


特殊方法和特殊屬性


? ? ? ? ? ? ? ? ?名稱? ? ? ? ? ? ? ? ? ? ? 描述


特殊屬性? ?__dict__? ? ? ? ? ? ? ? ?獲得類對(duì)象或?qū)嵗龑?duì)象所綁定的所有屬性和方法的字典




特殊方法? ?__len__()? ? ? ? ? ? ? 通過重寫__1en__()方法,讓內(nèi)置函數(shù)1en()的參數(shù)可以是自定義類型


__add__()? ? ? ? ? ? ? 通過重寫__add__()方法,可使用自定義對(duì)象具有“+”功能


__new__()? ? ? ? ? ? ? 用于創(chuàng)建對(duì)象


__init__()? ? ? ? ? ? ? 對(duì)創(chuàng)建的對(duì)象進(jìn)行初始化


類的淺拷貝與深拷貝


  • 變量的賦值操作


只是形成兩個(gè)變量,實(shí)際上還是指向同一個(gè)對(duì)象


淺拷貝


Python拷貝一般都是淺拷貝,拷貝時(shí),對(duì)象包含的子對(duì)象內(nèi)容不拷貝


,因此,源對(duì)象與拷貝對(duì)象會(huì)引用同一個(gè)子對(duì)象


深拷貝


·使用copy模塊的 deepcopy函數(shù),遞歸拷貝對(duì)象中包含


的子對(duì)象,源對(duì)象和拷貝對(duì)象所有的子對(duì)象也不相同


模塊


模塊英文為 Modules


·函數(shù)與模塊的關(guān)系


·一個(gè)模塊中可以包含N多個(gè)函數(shù)


在Python中一個(gè)擴(kuò)展名為.py的文件就是一個(gè)模塊


使用模塊的好處


·方便其它程序和腳本的導(dǎo)入并使用


避免函數(shù)名和變量名沖突


提高代碼的可維護(hù)性


提高代碼的可重用性


自定義模塊


創(chuàng)建模塊


新建一個(gè)py文件,名稱盡量不要與 Python自帶的標(biāo)準(zhǔn)模塊名稱相同


導(dǎo)入模塊


import? ?模塊名稱? ?[as別名]


from? 模塊名稱 import函數(shù)/變量/類


以主程序形式運(yùn)行


以主程序形式運(yùn)行


在每個(gè)模塊的定乂中都包括一個(gè)記錄模塊名稱的變量__name__,程序可


以檢查該變量,以確定他們?cè)谀膫€(gè)模塊中執(zhí)行。如果一個(gè)模塊不是被導(dǎo)入


到其它程序中執(zhí)行,那么它可能在解釋器的頂級(jí)模


塊中執(zhí)行。頂級(jí)模塊的__name__變量的值為__main__


Python中的包


Python中的包


包是一個(gè)分層次的目錄結(jié)構(gòu),它將一組功能相近的模塊組織在一個(gè)目錄下作用:


代碼規(guī)范


·避免模塊名稱沖突


包與目錄的區(qū)別


包含__init__. py文件的目錄稱為包


目錄里通常不包含__init__. py文件


包的導(dǎo)入


import? ? 包名.模塊名


導(dǎo)入帶有包的模塊時(shí)注意事項(xiàng)


使用import方式進(jìn)行導(dǎo)入時(shí),只能跟包名或模塊名


使用from ... Import可以導(dǎo)入包,模塊,函數(shù),變量


Python中常用的內(nèi)置模塊


模塊名? ? ? ? ? 描述


sys? ? ? ? ? ? ? ?與 Python解釋器及其環(huán)境操作相關(guān)的標(biāo)準(zhǔn)庫


time? ? ? ? ? ? ?提供與時(shí)間相關(guān)的各種函數(shù)的標(biāo)準(zhǔn)庫


os? ? ? ? ? ? ? ? 提供了訪問操作系統(tǒng)服務(wù)功能的標(biāo)準(zhǔn)庫


calendar? ? ? 提供與日期相關(guān)的各種函數(shù)的標(biāo)準(zhǔn)庫


urllib? ? ? ? ? ? 用于讀取來自網(wǎng)上(服務(wù)器)的數(shù)據(jù)標(biāo)準(zhǔn)庫


json? ? ? ? ? ? ?用于使用JS0N序列化和反序列化對(duì)象


re? ? ? ? ? ? ? ? 用于在字符串中執(zhí)行正則表達(dá)式匹配和替換


math? ? ? ? ? ?提供標(biāo)準(zhǔn)算術(shù)運(yùn)算函數(shù)的標(biāo)準(zhǔn)庫


decimal? ? ? 用于進(jìn)行精確控制運(yùn)算精度、有效數(shù)位和四舍五入操作的十進(jìn)制運(yùn)算


logging? ? ? 提供了靈活的記錄事件、錯(cuò)誤、警告和調(diào)試信息等目志信息的功能


第三方模塊的安裝及使用


第三方模塊的安裝


pip install 模塊名


第三方模塊的使用


import 模塊名


編碼格式


常見的字符編碼格式


Python的解釋器使用的是 Unicode(內(nèi)存)


py文件在磁盤上使用UTF-8存儲(chǔ)(外存)


文件的讀寫俗稱"IO操作"


文件讀寫操作流程


內(nèi)置函數(shù)open()創(chuàng)建文件對(duì)象


常用的文件打開模式


文件的類型


按文件中數(shù)據(jù)的組織形式,文件分為以下兩大類


文本文件:


存儲(chǔ)的是普通“字符”文本,默認(rèn)為 unicode字符集,


可以使用記本事程序打開


二進(jìn)制文件:


把數(shù)據(jù)內(nèi)容用“字節(jié)"進(jìn)行存儲(chǔ),無法用記事本打開,必須使用專用的軟件打開,


舉例:mp3音頻文件jpg圖片doC文檔等


打開模式? ?描述


r 以只讀模式打開文件,文件的指針將會(huì)放在文件的開頭


w 以只寫模式打開文件,如果文件不存在則創(chuàng)建,如果文件存在,則覆蓋原有內(nèi)容,文件指針在文件的開頭


a 以追加模式打開文件,如果文件不存在則創(chuàng)建,文件指針在文件開頭,如果文件存在,則在文件末尾追加內(nèi)容,文件指針在原文件末尾


b 以二進(jìn)制方式打開文件,不能單獨(dú)使用,需要與共它模式一起使用,rb,或者wb


+ 以讀寫方式打開文件,不能單獨(dú)使用,需要與其它模式一起使用,a+


文件對(duì)象的常用方法


方法名? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明


read([size])? ? ? ? ? ? ? ? ? ? ? ? 從文件中讀取size個(gè)字節(jié)或字符的內(nèi)容返回。若省略[size]則讀取到文件末尾,即一次讀取文件所有內(nèi)容


readline()? ? ? ? ?從文本文件中讀取一行內(nèi)容


readlines()? ? ? ? ? ? ? ? ? ? ? ? ?把文本文件中每一行都作為獨(dú)立的字符串對(duì)象,并將這些對(duì)象放入列表返回


write(str)? ? ? ? ? ? ? ? ? ? ? ? ? ?將字符串str內(nèi)容寫入文件


writelines(s_list)? ? ? ? ? ? ? ? 將字符串列表s_list寫入文本文件,不添加換行符


seek(offset[,whence])? ? ? ?把文件指針移動(dòng)到新的位置, offset表示相對(duì)于whence的位置:


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? offset:為正往結(jié)束方向移動(dòng),為負(fù)往開始方向移動(dòng)


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? whence不同的值代表不同含義:


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0:從文件頭開始計(jì)算(默認(rèn)值)


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1:從當(dāng)前位置開始計(jì)算


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2:從文件尾開始計(jì)算


tell()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回文件指針的當(dāng)前位置


flush()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 把緩沖區(qū)的內(nèi)容寫入文件,但不關(guān)閉文件


close()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 把緩沖區(qū)的內(nèi)容寫入文件,同時(shí)關(guān)閉文件,釋放文件對(duì)象相關(guān)資源


Wt語句(上下文管理器)


with語句可以自動(dòng)管理上下文資源,不論什么原因跳出with塊,


都能確保文件正確的關(guān)閉,以此來達(dá)到釋放資源的目的


σs模塊是Python內(nèi)內(nèi)置的與操作系統(tǒng)功能和文件系統(tǒng)相關(guān)的模塊,


該模塊中的語句的執(zhí)行結(jié)果通常與操作系統(tǒng)有關(guān)


,在不同的操作系統(tǒng)上運(yùn)行,得到的結(jié)果可能不一樣。


os模塊與os.path模塊用于對(duì)目錄或文件進(jìn)行操作


函數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明


getcwd? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回當(dāng)前的工作目錄


listdir(path)? ? ? ? ? ? ? ? ? ? ? 返回指定路徑下的文件和目錄信息


mkdir(path[, mode])? ? ? ?創(chuàng)建目錄


makedirs(path1/path2...[,mode]) 創(chuàng)建多級(jí)目錄


rmdir(path)? ? ?刪除目錄


removedirs(path1/path2......)? ? ? ? 刪除多級(jí)目錄


chdir(path)? ? ?將path設(shè)置未當(dāng)前工作目錄


os.path模塊操作目錄相關(guān)函數(shù)


函數(shù) 說明


abspath(path) 用于獲取文件或目錄的絕對(duì)路徑


exists(path) 用于判斷文件或目錄是否存在,如果存在返回True,否則返回False


join(path,name) 將目錄與目錄或者文件名拼接起來


splitext(path) 分離文件名和擴(kuò)展名


basename(path) 從一個(gè)目錄中提取文件名


dirname(path) 從一個(gè)路徑種提取文件路徑,不包括文件名


isdir(path) 用于判斷是否為路徑


python編輯的一些基礎(chǔ)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
肇源县| 穆棱市| 河津市| 宁津县| 广平县| 西乌| 成安县| 金乡县| 芮城县| 嫩江县| 平谷区| 越西县| 辽宁省| 山东省| 平潭县| 宜君县| 临清市| 惠安县| 栖霞市| 安塞县| 东明县| 漠河县| 天峻县| 砚山县| 恩平市| 银川市| 勃利县| 原平市| 乌鲁木齐县| 嘉善县| 巴塘县| 颍上县| 诸城市| 五家渠市| 红河县| 灵璧县| 麦盖提县| 河津市| 太康县| 大厂| 苍山县|