PYTHON知識點(diǎn)匯總.doc_第1頁
PYTHON知識點(diǎn)匯總.doc_第2頁
PYTHON知識點(diǎn)匯總.doc_第3頁
PYTHON知識點(diǎn)匯總.doc_第4頁
PYTHON知識點(diǎn)匯總.doc_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余11頁可下載查看

下載本文檔

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

文檔簡介

1、print句子也能夠跟上多個字符串,用逗號離隔,就能夠連成一串輸出:print 'The quick brown fox', 'jumps over', 'the lazy dog在Python中,等號=是賦值句子,能夠把恣意數(shù)據(jù)類型賦值給變量,同一個變量能夠重復(fù)賦值,并且能夠是不同類型的變量。變量自身類型不固定的言語稱之為動態(tài)言語,與之對應(yīng)的是靜態(tài)言語。靜態(tài)言語在界說變量時有必要指定變量類型,假如賦值的時分類型不匹配,就會報錯。假如字符串自身包含怎么辦?比方咱們要表明字符串 I'm OK ,這時,能夠用""括起來表明。相似的

2、,假如字符串包含",咱們就能夠用''括起來表示:假如字符串既包含又包含"怎么辦?這個時分,就需求對字符串的某些特別字符進(jìn)行“轉(zhuǎn)義”,Python字符串用 進(jìn)行轉(zhuǎn)義。n表示換行t表示一個制表符表示 、字符本身假如一個字符串包含許多需求轉(zhuǎn)義的字符,對每一個字符都進(jìn)行轉(zhuǎn)義會很費(fèi)事。為了防止這種狀況,咱們能夠在字符串前面加個前綴r ,表明這是一個raw字符串,里面的字符就不需要轉(zhuǎn)義了。如, r'(_)/(_)/'如果要表示多行字符串,可以用"'”'表示如果中文字符串在Pythoi#境下遇到 UnicodeDecodeErro

3、這是因?yàn)?py文件保存的格式有問題??梢栽诘谝恍刑砑幼⑨? -*- coding: utf-8 -*-print u'中文'在Python中,布爾類型還能夠與其他數(shù)據(jù)類型做and、or和not運(yùn)算直接用把list的所有元素都括起來,就是一個list對象。通常,我們會把list賦值給一個變量,這樣,就可以通過變量來引用list索引從0開端,也便是說,榜首個元素的索引是 0 ,第二個元素的索引是1 ,以此類推。因此,要打印第一名同學(xué)的名字,用 L0添加list的append礪法或者insert(方法定位刪去L.pop()()對list中的某一個索引賦值,就能夠直接用新的元素替換掉本

4、來的元素,list包含的元素個數(shù)堅(jiān)持不變??s進(jìn)請嚴(yán)厲依照Python的習(xí)氣寫法:4個空格,不要運(yùn)用 Tab,更不要混合Tab和空格,不然很簡單形成由于縮進(jìn)引起的語法過錯。if age >= 18:要防止嵌套結(jié)柳發(fā)聲. else . 1 3:,咱們能夠用if . 多個elif . else .的結(jié)構(gòu),一次寫完一切的規(guī)矩奇數(shù)加和for a in L: sum+=a x += 2偶數(shù)不要if x%2=0: Continuedict的榜首個特點(diǎn)是查找速度快,不管 dict有10個元素仍是10萬個元素,查找速度都相同。而list的查找速度跟著元素增加而逐步下降。d=d.get(x可以取到 d中ke

5、yW面的value個數(shù)len(s)s = set('Adam', 95), ('Lisa', 85), ('Bart', 59) for name,score in s:print name,':',scores.remove():s.add()比較函數(shù) cmp(x,y)假如想讓一個函數(shù)能承受恣意個參數(shù),咱們就能夠界說一個可變參數(shù):def fn(*args):print args可變參數(shù)的名字前面有個*號,我們可以傳入 0 個、 1個或多個參數(shù)給可變參數(shù)r.append(L晌 r 添加對這種常常取指定索引規(guī)模的操作,用循環(huán)十分繁瑣

6、,因而, Python 供給了切片( Slice )操作符,能大大簡化這種操作。對應(yīng)上面的問題,取前3 個元素,用一行代碼就能夠完結(jié)切片:>>> L0:3'Adam', 'Lisa', 'Bart'只用一個 : ,表明自始至終:>>> L:切片操作還能夠指定第三個參數(shù):>>> L:2'Adam', 'Bart'第三個參數(shù)表示每N個取一個,上面的L:2會每兩個元素取出一個來,也就是隔一個取一個。print L4:5-10洗獲得5的倍數(shù),再取后 10個首字母大寫 d

7、ef firstCharUpper(s):return s:1.upper()+s1:range(1,101)方法是使用 enumerates0數(shù):>>> L = 'Adam', 'Lisa', 'Bart', 'Paul'>>> for index, name in enumerate(L):. print index, '-', name.0 - Adam1 - Lisa2 - Bart3 - Pauldiet對象有一個values(方法,這個方法把diet轉(zhuǎn)換成一個包含所有

8、value的list,這樣,我們迭代的就是diet的每一個value:d = 'Adam': 95, 'Lisa': 85, 'Bart': 59 print d.values()# 85, 95, 59for v in d.(iter)values():print v# 85# 95# 59items(方法把diet對象轉(zhuǎn)換成了包含tupe勺list,我們對這個list進(jìn)行迭代,可以同時獲得ke評口 valued = 'Adam': 95, 'Lisa': 85, 'Bart': 59, '

9、;Paul': 74 n=0sum = 0.0for k, v in d.iteritems():sum = sum + vn+=1print k,':',vprint 'average', ':', sum/nx * x for x in range(1, 11)變量能夠指向函數(shù)f=abs根號 import mathdef add(x, y, f):return f(x) + f(y)print add(25, 9, math.sqrt)map(星Python置的高階函數(shù),它接收一個函數(shù)f和一個list,并通過把函數(shù)f依次作用在list

10、的每個元素上,得到一個新的 list并返回。def format_name(s):return s:1.upper()+s1:.lower()print map(format_name, 'adam', 'LISA', 'barT')reduce(函數(shù)也是Pythons置的一個高階函數(shù)。reduce(函數(shù)接收的參數(shù)和 map(類似,一個函數(shù)f, 一個list,但行為和 map(不同,reduce傳入的函數(shù)f必須接收兩個參數(shù),reduce附list的每個元素反復(fù)調(diào)用函數(shù)f,并返回最終結(jié)果值。reduce處可以接收第3個可選參數(shù),作為計(jì)算的初始值。如

11、果把初始值設(shè)為100,計(jì)算:reduce(f, 1, 3, 5, 7, 9, 100)成果將變?yōu)?25 ,由于榜首輪核算是:計(jì)算初始值和第一個元素:f(100, 1)結(jié)果為101。filter()函數(shù)是Pytho附置的另一個有用的高階函數(shù),filter()函數(shù)接收一個 函數(shù)f和一個list,這個函數(shù)f的作用是對每個元素進(jìn)行判斷,返回Tru城False, filter()。艮據(jù)判斷成果主動過濾掉不契合條件的元素,回來由契合條件元素組成的新list o利用filter。,可以完成很多有用的功能,例如,刪除Non或者空字符串:def is_not_empty(s):return s and len(

12、s.strip() > 0filter(is_not_empty, 'test', None, '', 'str', ' ', 'END')根為整數(shù) def is_sqr(x):return math.sqrt(x)%1=0升序 def cmp_ignore_case(s1, s2):if s1.lower()>s2.lower():return 1elif s1.lower()<s2.lower():return -1else:return 0print sorted('bob'

13、, 'about', 'Zoo', 'Credit', cmp_ignore_case)像這種內(nèi)層函數(shù)引證了外層函數(shù)的變量(參數(shù)也算變量),然后回來內(nèi)層函數(shù)的狀況,稱為 閉包(Closure )。返回閉包不能引用循環(huán)變量,請改寫count(的數(shù),讓它正確返回能計(jì)算1x1 2x2、3x3。勺函數(shù)。def count():fs =for i in range(1,4):def f(i):def g():return i*ireturn gfs.append(f(i)return fsf1, f2, f3 = count()print f1(), f2

14、(), f3()通過對比可以看出,匿名函數(shù)lambda x: x *實(shí)際上就是:def f(x):return x * x關(guān)鍵字 lambda 表明匿名函數(shù),冒號前面的 x 表明函數(shù)參數(shù)。測驗(yàn)空字符print filter(lambda s:s and len(s.strip() > 0, 'test', None, '', 'str', ' ', 'END')裝修器 new fndef performance(f):def print_time(*args, *kw):print 'call 

15、9;+f._name_+'() in '+time.strftime('%Y-%m-%d',time.localtime(time.time()return f(*args,*kw)return print_time裝修器有 decorator 的狀況下,再打印函數(shù)名:def log(f):def wrapper(*args, *kw):print 'call.'return f(*args, *kw)return wrapperlogdef f2(x):passprint f2._name_def performance(unit):def f

16、n(f):functools.wraps(f) def wrapper(*args, *kw):t0 = time.time() back = f(*args, *kw) t1 = time.time() t = (t1 - t0) if unit ='s' else (t1 - t0) * 1000 print 'call %s() in %s %s' % (f._name_, t, unit) return backreturn wrapperreturn fnint()函數(shù)還提供額外的base數(shù),默認(rèn)值為 10。如果傳入 bas哆數(shù),就可以做 N進(jìn)制的轉(zhuǎn)換

17、:>>> int('12345', base=8)5349>>> int('12345', 16)74565base=2進(jìn)去:假設(shè)要轉(zhuǎn)換大量的二進(jìn)制字符串,每次都傳入int(x, base=2)常麻煩,于是,我們想到,可以定義一個int2()的函數(shù),默認(rèn)把def int2(x, base=2):return int(x, base)functools.par僦是幫助我們創(chuàng)建一個偏函數(shù)的,不需要我們自己定義int2(),可以直接使用下面的代碼創(chuàng)建一個新的函數(shù)int2> >> import functools&g

18、t; >> int2 = functools.partial(int, base=2)import functoolssorted_ignore_case = functools.partial(sorted, cmp=lambda a,b: cmp(a.lower(),b.lower()print sorted_ignore_case('bob', 'about', 'Zoo', 'Credit')math.pow(2, 0.5)from math import log運(yùn)用ImportError 過錯,咱們常常在Py

19、thon中動態(tài)導(dǎo)入模塊:try:from cStringIO import StringIOexcept ImportError:from StringIO import StringIOPython 3a已改進(jìn)了整數(shù)的除法運(yùn)算,除將得到浮點(diǎn)數(shù),/'除才仍是整數(shù):> >> 10 / 33.3333333333333335> >> 10 / 33要在Python 2.7 中引進(jìn)3.x 的除法規(guī)矩,導(dǎo)入_future_ 的division :>>> from _future_ import division>>> pr

20、int 10 / 33.3333333333333335class A(object)passa1 = A()a2 = A()1 .判別某個目標(biāo)是否是類的實(shí)例isinstance(a1, A)2判別兩個目標(biāo)是否是否完全一致(意思為:判別兩個變量引證的地址是否相同,假如相同,則兩個變量實(shí)踐引證為同一目標(biāo))用is進(jìn)行判別a3 = a1print a1 is a33判別兩個目標(biāo)中的內(nèi)容是否相同用=進(jìn)行判別print al = a2依照關(guān)鍵詞排序L1 = p1, p2, p3L2 = sorted(L1,key=lambda x:)在定義Perso斐時,可以為Perso類添加一個特殊的_i

21、nit_偽法,當(dāng)創(chuàng)建實(shí)例時,_init_偽法被自動調(diào)用,我們就能在此為每個實(shí)例都統(tǒng)一加上以下屬性:class Person(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)的diet.setattr(方法接受3個參數(shù):setattr對象,屬性,屬性的值)setattr(self,

22、k,V)當(dāng)于 self.k = vkw.iteritems例遍字典kw的所有ke冰口 value分別匹配 k, v*arg溶納任意變量的list*kwargs容納任意 key value勺 dietclass Person(objeet):def _init_(self, name, gender, birth, *kw):=nameself.gender=genderself.birth=birthfor k,v in kw.iteritems():setattr(self,k,v)Pytho附屬性權(quán)限的控制是通過屬性名來實(shí)現(xiàn)的,如果一個屬性由雙下劃線開頭(_)該屬性就無法

23、被外部訪問。看例子:class Person(object):def _init_ (self, name): = nameself._title = 'Mr'self. _job = 'Student'class Person(object):def _init_(self, name, score):=nameself._score=scorep = Person('Bob', 59)print try:print p._scoreexcept AttributeError:print '

24、;attributeerror'class Person(object):count=0def _init_(self,name):=namePerson.count+=1p1 = Person('Bob') print Person.countp2 = Person('Alice')print Person.countp3 = Person('Tim')print Person.count假如現(xiàn)已界說了 Person類,需求界說新的Student和Teacher類時,能夠直接從Person類承繼:class Perso

25、n(object):def _init_(self, name, gender): = nameself.gender = gender界說Student類時,只需求把額定的特點(diǎn)加上,例如score :class Student( Person ):def _init_(self, name, gender, score):super(Student, self)._init_(name, gender)self.score = score一定要用 super(Student, self)._init_(name通ender)父類,否貝U,繼承自Person勺 Studein

26、#沒有 nam奪口 gender函數(shù)super(Student, self)回當(dāng)前類繼承的父類,即 Person然后調(diào)用 init由法,注意selfie已在super(W傳入,在 init(聲將隱式傳遞,不需要寫出(也 不能寫)。多重承繼的承繼鏈就不是一棵樹了,它像這樣:class A(object):def _init_(self, a):print 'init A.'self.a = aclass B( A):def _init_(self, a):super(B, self)._init_(a)print 'init B.'class C( A):def

27、_init_(self, a):super(C, self)._init_(a)print 'init C.'class D( B, C ):def _init_(self, a):super(D, self)._init_(a)print 'init D.'Python)網(wǎng)絡(luò)服務(wù)器有 TCPServer UDPServer UnixStreamServeU nixDatagramSer前服務(wù)器運(yùn)轉(zhuǎn)形式有 多進(jìn)程 ForkingMixi和多線程 ThreadingMiXn 種。要創(chuàng)立多進(jìn)程形式的TCPServer :class MyTCPServer(TCPSe

28、rver, ForkingMixin)pass要創(chuàng)立多線程形式的UDPServer :class MyUDPServer(UDPServer, ThreadingMixin):pass多重 class BStudent(Student,BasketballMixin):PassClassC(A,B)返回屬性:對于實(shí)例變量,dir()返回所有實(shí)例屬性,包括' _class_這類有特殊意義的屬性。注意到方法 'whoAm也是s的一個屬性。首先可以用type()l數(shù)獲取變量的類型,它返回一個Type寸象。dir()返回的屬性是字符串列表,如果已知一個屬性名稱,要獲取或者設(shè)置對象的屬性

29、,就需要用getattr(和setattr(函數(shù)了對int、str等內(nèi)置數(shù)據(jù)類型排序時,Pytho的sorted儆照默認(rèn)的比較函數(shù) cmp#序,但是,如果對一組 Stude蘸的實(shí)例排序時,就必須提供我們自己的特殊方法 _cmp_()class Student(object):def _init_(self, name, score): = nameself.score = scoredef _str_(self):return '(%s: %s)' % (, self.score)_repr_ = _str_def _cmp_(self, s

30、):if < :return -1elif > :return 1else:return 0從低到高 return cmp(,)從高至 U 底 return -cmp(,)如果一個類表現(xiàn)得像一個list,要獲取有多少個元素,就得用len()函數(shù)。a, b = b, a +b實(shí)就是多個變量的賦值運(yùn)算,先算 =右邊,再賦值給左邊變量:0)a=0,b=11)a=b=1,b=a+b=12)a=b=1,b=a+b=23)a=b=2,b=a+b=34)a=b=3,b=a+

31、b=55)a=b=5,b=a+b=86)a=b=8,b=a+b=13要表明有理數(shù),能夠用一個 Rational類來表明:class Rational(object):def _init_(self, p, q):self.p = pself.q = q 求最大公約數(shù) def gcs(a,b,c=1):if 0=a%2 and 0=b%2: return gcs(a/2,b/2,c*2);s = abs(a-b) m = min(a,b) if s = m:return m*creturn gcs(s,m,c)假如要把Rational轉(zhuǎn)為int ,應(yīng)該運(yùn)用:r = Rational(12, 5)

32、n = int(r)要讓int()函數(shù)正常工作,只需要實(shí)現(xiàn)特殊方法_int_():class Rational(object):def _init_(self, p, q):self.p = pself.q = qdef _int_(self):return self.p / self.qclass Rational(object): def _init_(self, p, q):self.p = p self.q = qdef _int_(self): return self.p / self.qdef _float_(self):return self.p*1.0/self.qprint

33、float(Rational(7, 2) print float(Rational(1,3)以單下劃線開頭(_foO的代表不能直接訪問的類屬性,需通過類提供的接口進(jìn)行訪問,不能用“fromxxx import *而導(dǎo)入;以雙下劃線開頭的(_fo。代表類的私有成員;以雙下劃線最初和結(jié)束的(_foo_ )代表python里特別辦法專用的標(biāo)識,如_init_()代表類的結(jié)構(gòu)函數(shù)。由于Python支撐高階函數(shù),在函數(shù)式編程中咱們介紹了裝修器函數(shù),能夠用裝修器函數(shù)把 get/set 辦法“裝修”成特點(diǎn)調(diào)用:class Student(object):def _init_(self, name, score): = nameself._score = scorepropertydef score(self):return self._scorescore.setter def score(self, score):if score < 0 or score > 100:raise ValueError('invalid score')self._score = score第個

溫馨提示

  • 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

提交評論