PYTHON知識點匯總整理版_第1頁
PYTHON知識點匯總整理版_第2頁
PYTHON知識點匯總整理版_第3頁
PYTHON知識點匯總整理版_第4頁
PYTHON知識點匯總整理版_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

print語句也能夠跟上多個字符串,用逗號“,”隔開,就能夠連成一串輸出:print'Thequickbrownfox','jumpsover','thelazydog'在Python中,等號=是賦值語句,能夠把任意數(shù)據(jù)類型賦值給變量,同一個變量能夠重復(fù)賦值,而且能夠是不一樣類型變量。變量本身類型不固定語言稱之為動態(tài)語言,與之對應(yīng)是靜態(tài)語言。靜態(tài)語言在定義變量時必須指定變量類型,假如賦值時候類型不匹配,就會報錯。假如字符串本身包含'怎么辦?比如我們要表示字符串

I'mOK

,這時,能夠用""括起來表示。類似,假如字符串包含",我們就能夠用''括起來表示:假如字符串既包含'又包含"怎么辦?這個時候,就需要對字符串一些特殊字符進(jìn)行“轉(zhuǎn)義”,Python字符串用\進(jìn)行轉(zhuǎn)義。\n表示換行\(zhòng)t表示一個制表符\\表示\字符本身假如一個字符串包含很多需要轉(zhuǎn)義字符,對每一個字符都進(jìn)行轉(zhuǎn)義會很麻煩。為了防止這種情況,我們能夠在字符串前面加個前綴

r,表示這是一個

raw

字符串,里面字符就不需要轉(zhuǎn)義了。如,r'\(~_~)/\(~_~)/'。假如要表示多行字符串,能夠用'''...'''表示假如漢字字符串在Python環(huán)境下碰到UnicodeDecodeError,這是因為.py文件保留格式有問題。能夠在第一行添加注釋#-*-coding:utf-8-*-printu'漢字'在Python中,布爾類型還能夠與其余數(shù)據(jù)類型做and、or和not運算直接用

[]

把list全部元素都括起來,就是一個list對象。通常,我們會把list賦值給一個變量,這么,就能夠經(jīng)過變量來引用list索引從0開始,也就是說,第一個元素索引是0,第二個元素索引是1,以這類推。所以,要打印第一名同學(xué)名字,用L[0]添加

list

append()

方法或者insert()方法定位刪除L.pop()

對list中某一個索引賦值,就能夠直接用新元素替換掉原來元素,list包含元素個數(shù)保持不變??s進(jìn)請嚴(yán)格按照Python習(xí)慣寫法:4個空格,不要使用Tab,更不要混合Tab和空格,不然很輕易造成因為縮進(jìn)引發(fā)語法錯誤。ifage>=18:要防止嵌套結(jié)構(gòu)if...else...,我們能夠用

if...多個elif...else...結(jié)構(gòu),一次寫完全部規(guī)則奇數(shù)加和forainL:

sum+=ax+=2偶數(shù)不要ifx%2==0:Continuedict第一個特點是查找速度快,不論dict有10個元素還是10萬個元素,查找速度都一樣。而list查找速度伴隨元素增加而逐步下降。d={}d.get(x)能夠取到d{}中key后面value個數(shù)len(s)s=set([('Adam',95),('Lisa',85),('Bart',59)])forname,scoreins:printname,':',scores.remove():s.add()比較函數(shù)cmp(x,y)假如想讓一個函數(shù)能接收任意個參數(shù),我們就能夠定義一個可變參數(shù):deffn(*args):printargs可變參數(shù)名字前面有個

*

號,我們能夠傳入0個、1個或多個參數(shù)給可變參數(shù)r.append(L[i])向r添加對這種經(jīng)常取指定索引范圍操作,用循環(huán)十分繁瑣,所以,Python提供了切片(Slice)操作符,能大大簡化這種操作。對應(yīng)上面問題,取前3個元素,用一行代碼就能夠完成切片:>>>L[0:3]['Adam','Lisa','Bart']只用一個

:

,表示從頭到尾:>>>L[:]切片操作還能夠指定第三個參數(shù):>>>L[::2]['Adam','Bart']第三個參數(shù)表示每N個取一個,上面L[::2]會每兩個元素取出一個來,也就是隔一個取一個。printL[4::5][-10:]先取得5倍數(shù),再取后10個首字母大寫deffirstCharUpper(s):returns[:1].upper()+s[1:]range(1,101)方法是使用

enumerate()函數(shù):>>>L=['Adam','Lisa','Bart','Paul']>>>forindex,nameinenumerate(L):...printindex,'-',name...0-Adam1-Lisa2-Bart3-Pauldict對象有一個

values()方法,這個方法把dict轉(zhuǎn)換成一個包含全部valuelist,這么,我們迭代就是dict每一個value:d={'Adam':95,'Lisa':85,'Bart':59}printd.values()#[85,95,59]forvind.(iter)values():printv#85#95#59items()方法把dict對象轉(zhuǎn)換成了包含tuplelist,我們對這個list進(jìn)行迭代,能夠同時取得key和valued={'Adam':95,'Lisa':85,'Bart':59,'Paul':74}n=0sum=0.0fork,vind.iteritems():sum=sum+vn+=1printk,':',vprint'average',':',sum/n[x*xforxinrange(1,11)]變量能夠指向函數(shù)f=abs根號importmathdefadd(x,y,f):returnf(x)+f(y)printadd(25,9,math.sqrt)map()是Python內(nèi)置高階函數(shù),它接收一個函數(shù)f

和一個

list,并經(jīng)過把函數(shù)f依次作用在list每個元素上,得到一個新list并返回。defformat_name(s):returns[:1].upper()+s[1:].lower()printmap(format_name,['adam','LISA','barT'])reduce()函數(shù)也是Python內(nèi)置一個高階函數(shù)。reduce()函數(shù)接收參數(shù)和map()類似,一個函數(shù)f,一個list,但行為和map()不一樣,reduce()傳入函數(shù)f必須接收兩個參數(shù),reduce()對list每個元素重復(fù)調(diào)用函數(shù)f,并返回最終止果值。reduce()還能夠接收第3個可選參數(shù),作為計算初始值。假如把初始值設(shè)為100,計算:reduce(f,[1,3,5,7,9],100)結(jié)果將變?yōu)?25,因為第一輪計算是:計算初始值和第一個元素:f(100,1),結(jié)果為101。filter()函數(shù)是

Python

內(nèi)置另一個有用高階函數(shù),filter()函數(shù)接收一個函數(shù)f

和一個list,這個函數(shù)

f

作用是對每個元素進(jìn)行判斷,返回True或False,filter()依照判斷結(jié)果自動過濾掉不符合條件元素,返回由符合條件元素組成新list。利用filter(),能夠完成很多有用功效,比如,刪除None或者空字符串:defis_not_empty(s):returnsandlen(s.strip())>0filter(is_not_empty,['test',None,'','str','','END'])根為整數(shù)defis_sqr(x):returnmath.sqrt(x)%1==0升序defcmp_ignore_case(s1,s2):ifs1.lower()>s2.lower():return1elifs1.lower()<s2.lower():return-1else:return0printsorted(['bob','about','Zoo','Credit'],cmp_ignore_case)像這種內(nèi)層函數(shù)引用了外層函數(shù)變量(參數(shù)也算變量),然后返回內(nèi)層函數(shù)情況,稱為閉包(Closure)。返回閉包不能引用循環(huán)變量,請改寫count()函數(shù),讓它正確返回能計算1x1、2x2、3x3函數(shù)。defcount():fs=[]foriinrange(1,4):deff(i):defg():returni*ireturngfs.append(f(i))returnfsf1,f2,f3=count()printf1(),f2(),f3()經(jīng)過對比能夠看出,匿名函數(shù)

lambdax:x*x

實際上就是:deff(x):returnx*x關(guān)鍵字lambda

表示匿名函數(shù),冒號前面

x表示函數(shù)參數(shù)。測試空字符printfilter(lambdas:sandlen(s.strip())>0,['test',None,'','str','','END'])裝飾器@new—fndefperformance(f):defprint_time(*args,**kw):print'call'+f.__name__+'()in'+time.strftime('%Y-%m-%d',time.localtime(time.time()))returnf(*args,**kw)returnprint_time裝飾器有decorator情況下,再打印函數(shù)名:deflog(f):defwrapper(*args,**kw):print'call...'returnf(*args,**kw)returnwrapper@logdeff2(x):passprintf2.__name__defperformance(unit):deffn(f):@functools.wraps(f)defwrapper(*args,**kw):t0=time.time()back=f(*args,**kw)t1=time.time()t=(t1-t0)ifunit=='s'else(t1-t0)*1000print'call%s()in%s%s'%(f.__name__,t,unit)returnbackreturnwrapperreturnfnint()函數(shù)還提供額外base參數(shù),默認(rèn)值為10。假如傳入base參數(shù),就能夠做

N

進(jìn)制轉(zhuǎn)換:>>>int('12345',base=8)5349>>>int('12345',16)74565假設(shè)要轉(zhuǎn)換大量二進(jìn)制字符串,每次都傳入int(x,base=2)非常麻煩,于是,我們想到,能夠定義一個int2()函數(shù),默認(rèn)把base=2傳進(jìn)去:defint2(x,base=2):returnint(x,base)functools.partial就是幫助我們創(chuàng)建一個偏函數(shù),不需要我們自己定義int2(),能夠直接使用下面代碼創(chuàng)建一個新函數(shù)int2:>>>importfunctools>>>int2=functools.partial(int,base=2)importfunctoolssorted_ignore_case=functools.partial(sorted,cmp=lambdaa,b:cmp(a.lower(),b.lower()))printsorted_ignore_case(['bob','about','Zoo','Credit'])math.pow(2,0.5)frommathimportlog利用ImportError錯誤,我們經(jīng)常在Python中動態(tài)導(dǎo)入模塊:try:fromcStringIOimportStringIOexceptImportError:fromStringIOimportStringIOPython3.x已經(jīng)改進(jìn)了整數(shù)除法運算,“/”除將得到浮點數(shù),“//”除才仍是整數(shù):>>>10/33.3335>>>10//33要在Python2.7中引入3.x除法規(guī)則,導(dǎo)入__future__division:>>>from__future__importdivision>>>print10/33.3335classA(object)

pass

a1=A()

a2=A()

1.判斷某個對象是否是類實例

isinstance(a1,A)

2.判斷兩個對象是否是否完全一致(意思為:判斷兩個變量引用地址是否相同,假如相同,則兩個變量實際引用為同一對象)

用is進(jìn)行判斷

a3=a1

printa1isa3

3.判斷兩個對象中內(nèi)容是否相同

用==進(jìn)行判斷

printa1==a2按照關(guān)鍵詞排序L1=[p1,p2,p3]L2=sorted(L1,key=lambdax:)在定義Person類時,能夠為Person類添加一個特殊__init__()方法,當(dāng)創(chuàng)建實例時,__init__()方法被自動調(diào)用,我們就能在此為每個實例都統(tǒng)一加上以下屬性:classPerson(object):def__init__(self,name,gender,birth):=nameself.gender=genderself.birth=birth__init__()

方法第一個參數(shù)必須是

self(也能夠用別名字,但提議使用習(xí)慣使用方法),后續(xù)參數(shù)則能夠自由指定,和定義函數(shù)沒有任何區(qū)分。解釋器內(nèi)部會將**kw拆分成對應(yīng)dict.

setattr()方法接收3個參數(shù):setattr(對象,屬性,屬性值)

setattr(self,k,v)相當(dāng)于self.k=v

kw.iteritems()歷遍字典kw全部key和value,分別匹配k,v*args容納任意變量list

*kwargs容納任意key,valuedictclassPerson(object):def__init__(self,name,gender,birth,**kw):=nameself.gender=genderself.birth=birthfork,vinkw.iteritems():setattr(self,k,v)Python對屬性權(quán)限控制是經(jīng)過屬性名來實現(xiàn),假如一個屬性由雙下劃線開頭(__),該屬性就無法被外部訪問??蠢樱篶lassPerson(object):def__init__(self,name):=nameself._title='Mr'self.__job='Student'classPerson(object):def__init__(self,name,score):=nameself.__score=scorep=Person('Bob',59)try:printp.__scoreexceptAttributeError:print'attributeerror'classPerson(object):count=0def__init__(self,name):=namePerson.count+=1p1=Person('Bob')printPerson.countp2=Person('Alice')printPerson.countp3=Person('Tim')printPerson.count假如已經(jīng)定義了Person類,需要定義新Student和Teacher類時,能夠直接從Person類繼承:classPerson(object):def__init__(self,name,gender):=nameself.gender=gender定義Student類時,只需要把額外屬性加上,比如score:classStudent(Person):def__init__(self,name,gender,score):super(Student,self).__init__(name,gender)self.score=score一定要用

super(Student,self).__init__(name,gender)

去初始化父類,不然,繼承自

Person

Student

將沒有

name

gender。函數(shù)super(Student,self)將返回當(dāng)前類繼承父類,即

Person

,然后調(diào)用__init__()方法,注意self參數(shù)已在super()中傳入,在__init__()中將隱式傳遞,不需要寫出(也不能寫)。多重繼承繼承鏈就不是一棵樹了,它像這么:classA(object):def__init__(self,a):print'initA...'self.a=aclassB(A):def__init__(self,a):super(B,self).__init__(a)print'initB...'classC(A):def__init__(self,a):super(C,self).__init__(a)print'initC...'classD(B,C):def__init__(self,a):super(D,self).__init__(a)print'initD...'Python網(wǎng)絡(luò)服務(wù)器有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,而服務(wù)器運行模式有

多進(jìn)程ForkingMixin

多線程ThreadingMixin兩種。要創(chuàng)建多進(jìn)程模式

TCPServer:classMyTCPServer(TCPServer,ForkingMixin)pass要創(chuàng)建多線程模式

UDPServer:classMyUDPServer(UDPServer,ThreadingMixin):pass多重classBStudent(Student,BasketballMixin):PassClassC(A,B)返回屬性:對于實例變量,dir()返回全部實例屬性,包含`__class__`這類有特殊意義屬性。注意到方法`whoAmI`也是

s

一個屬性。首先能夠用

type()

函數(shù)獲取變量類型,它返回一個

Type

對象。dir()返回屬性是字符串列表,假如已知一個屬性名稱,要獲取或者設(shè)置對象屬性,就需要用

getattr()

setattr()函數(shù)了對

int、str

等內(nèi)置數(shù)據(jù)類型排序時,Python

sorted()

按照默認(rèn)比較函數(shù)

cmp

排序,不過,假如對一組

Student

類實例排序時,就必須提供我們自己特殊方法

__cmp__():classStudent(object):def__init__(self,name,score):=nameself.score=scoredef__str__(self):return'(%s:%s)'%(,self.score)__repr__=__str__def__cmp__(self,s):<:>:return1else:return0從低到高returncmp(,)從高到底return-cmp(,)假如一個類表現(xiàn)得像一個list,要獲取有多少個元素,就得用

len()

函數(shù)。a,b=b,a+b其實就是多個變量賦值運算,先算=右邊,再賦值給左邊變量:

0)a=0,b=1

1)a=b=1,b=a+b=1

2)a=b=1,b=a+b=2

3)a=b=2,b=a+b=3

4)a=b=3,b=a+b=5

5)a=b=5,b=a+b=8

6)a=b=8,b=a+b=13要表示有理數(shù),能夠用一個Rational類來表示:classRational(object):def__init__(self,p,q):self.p=pself.q=q求最大條約數(shù)defgcs(a,b,c=1):if0==a%2and0==b%2:returngcs(a/2,b/2,c*2);s=abs(a-b)m=min(a,b)ifs==m:returnm*creturngcs(s,m,c)假如要把

Rational

轉(zhuǎn)為

int,應(yīng)該使用:r=Rational(12,5)n=int(r)要讓int()函數(shù)正常工作,只需要實現(xiàn)特殊方法__int__():classRational(object):def__init__(self,p,q):self.p=pself.q=qdef__int__(self):returnself.p//self.qclassRational(object):def__init__(self,p,q):self.p=pself.q=qdef__int__(self):returnself.p//self.qdef__float__(self):returnself.p*1.0/self.qprintfloat(Rational(7,2))printfloat(Rational(1,3))

以單下劃線開頭(_foo)代表不能直接訪問類屬性,需經(jīng)過類提供接口進(jìn)行訪問,不能用“fromxxximport*”而導(dǎo)入;以雙下劃線開頭(__foo)代表類私有組員;以雙下劃線開頭和結(jié)尾(__foo__)代表python里特殊方法專用標(biāo)識,如__init__()代表類結(jié)構(gòu)函數(shù)。因為Python支持高

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論