python編輯的一些基礎(chǔ)
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) 用于判斷是否為路徑