版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、print句子也能夠跟上多個(gè)字符串,用逗號(hào)離隔,就能夠連成一串輸出:print 'The quick brown fox', 'jumps over', 'the lazy dog在Python中,等號(hào)=是賦值句子,能夠把恣意數(shù)據(jù)類型賦值給變量,同一個(gè)變量能夠重復(fù)賦值,并且能夠是不同類型的變量。變量自身類型不固定的言語稱之為動(dòng)態(tài)言語,與之對應(yīng)的是靜態(tài)言語。靜態(tài)言語在界說變量時(shí)有必要指定變量類型,假如賦值的時(shí)分類型不匹配,就會(huì)報(bào)錯(cuò)。假如字符串自身包含怎么辦?比方咱們要表明字符串 I'm OK ,這時(shí),能夠用""括起來表明。相似的
2、,假如字符串包含",咱們就能夠用''括起來表示:假如字符串既包含又包含"怎么辦?這個(gè)時(shí)分,就需求對字符串的某些特別字符進(jìn)行“轉(zhuǎn)義”,Python字符串用 進(jìn)行轉(zhuǎn)義。n表示換行t表示一個(gè)制表符表示 、字符本身假如一個(gè)字符串包含許多需求轉(zhuǎn)義的字符,對每一個(gè)字符都進(jìn)行轉(zhuǎn)義會(huì)很費(fèi)事。為了防止這種狀況,咱們能夠在字符串前面加個(gè)前綴r ,表明這是一個(gè)raw字符串,里面的字符就不需要轉(zhuǎn)義了。如, r'(_)/(_)/'如果要表示多行字符串,可以用"'”'表示如果中文字符串在Pythoi#境下遇到 UnicodeDecodeErro
3、這是因?yàn)?py文件保存的格式有問題。可以在第一行添加注釋# -*- coding: utf-8 -*-print u'中文'在Python中,布爾類型還能夠與其他數(shù)據(jù)類型做and、or和not運(yùn)算直接用把list的所有元素都括起來,就是一個(gè)list對象。通常,我們會(huì)把list賦值給一個(gè)變量,這樣,就可以通過變量來引用list索引從0開端,也便是說,榜首個(gè)元素的索引是 0 ,第二個(gè)元素的索引是1 ,以此類推。因此,要打印第一名同學(xué)的名字,用 L0添加list的append礪法或者insert(方法定位刪去L.pop()()對list中的某一個(gè)索引賦值,就能夠直接用新的元素替換掉本
4、來的元素,list包含的元素個(gè)數(shù)堅(jiān)持不變。縮進(jìn)請嚴(yán)厲依照Python的習(xí)氣寫法:4個(gè)空格,不要運(yùn)用 Tab,更不要混合Tab和空格,不然很簡單形成由于縮進(jìn)引起的語法過錯(cuò)。if age >= 18:要防止嵌套結(jié)柳發(fā)聲. else . 1 3:,咱們能夠用if . 多個(gè)elif . else .的結(jié)構(gòu),一次寫完一切的規(guī)矩奇數(shù)加和for a in L: sum+=a x += 2偶數(shù)不要if x%2=0: Continuedict的榜首個(gè)特點(diǎn)是查找速度快,不管 dict有10個(gè)元素仍是10萬個(gè)元素,查找速度都相同。而list的查找速度跟著元素增加而逐步下降。d=d.get(x可以取到 d中ke
5、yW面的value個(gè)數(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)假如想讓一個(gè)函數(shù)能承受恣意個(gè)參數(shù),咱們就能夠界說一個(gè)可變參數(shù):def fn(*args):print args可變參數(shù)的名字前面有個(gè)*號(hào),我們可以傳入 0 個(gè)、 1個(gè)或多個(gè)參數(shù)給可變參數(shù)r.append(L晌 r 添加對這種常常取指定索引規(guī)模的操作,用循環(huán)十分繁瑣
6、,因而, Python 供給了切片( Slice )操作符,能大大簡化這種操作。對應(yīng)上面的問題,取前3 個(gè)元素,用一行代碼就能夠完結(jié)切片:>>> L0:3'Adam', 'Lisa', 'Bart'只用一個(gè) : ,表明自始至終:>>> L:切片操作還能夠指定第三個(gè)參數(shù):>>> L:2'Adam', 'Bart'第三個(gè)參數(shù)表示每N個(gè)取一個(gè),上面的L:2會(huì)每兩個(gè)元素取出一個(gè)來,也就是隔一個(gè)取一個(gè)。print L4:5-10洗獲得5的倍數(shù),再取后 10個(gè)首字母大寫 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對象有一個(gè)values(方法,這個(gè)方法把diet轉(zhuǎn)換成一個(gè)包含所有
8、value的list,這樣,我們迭代的就是diet的每一個(gè)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,我們對這個(gè)list進(jìn)行迭代,可以同時(shí)獲得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根號(hào) import mathdef add(x, y, f):return f(x) + f(y)print add(25, 9, math.sqrt)map(星Python置的高階函數(shù),它接收一個(gè)函數(shù)f和一個(gè)list,并通過把函數(shù)f依次作用在list
10、的每個(gè)元素上,得到一個(gè)新的 list并返回。def format_name(s):return s:1.upper()+s1:.lower()print map(format_name, 'adam', 'LISA', 'barT')reduce(函數(shù)也是Pythons置的一個(gè)高階函數(shù)。reduce(函數(shù)接收的參數(shù)和 map(類似,一個(gè)函數(shù)f, 一個(gè)list,但行為和 map(不同,reduce傳入的函數(shù)f必須接收兩個(gè)參數(shù),reduce附list的每個(gè)元素反復(fù)調(diào)用函數(shù)f,并返回最終結(jié)果值。reduce處可以接收第3個(gè)可選參數(shù),作為計(jì)算的初始值。如
11、果把初始值設(shè)為100,計(jì)算:reduce(f, 1, 3, 5, 7, 9, 100)成果將變?yōu)?25 ,由于榜首輪核算是:計(jì)算初始值和第一個(gè)元素:f(100, 1)結(jié)果為101。filter()函數(shù)是Pytho附置的另一個(gè)有用的高階函數(shù),filter()函數(shù)接收一個(gè) 函數(shù)f和一個(gè)list,這個(gè)函數(shù)f的作用是對每個(gè)元素進(jìn)行判斷,返回Tru城False, filter()。艮據(jù)判斷成果主動(dòng)過濾掉不契合條件的元素,回來由契合條件元素組成的新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ù),冒號(hào)前面的 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)常麻煩,于是,我們想到,可以定義一個(gè)int2()的函數(shù),默認(rèn)把def int2(x, base=2):return int(x, base)functools.par僦是幫助我們創(chuàng)建一個(gè)偏函數(shù)的,不需要我們自己定義int2(),可以直接使用下面的代碼創(chuàng)建一個(gè)新的函數(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 過錯(cuò),咱們常常在Py
19、thon中動(dòng)態(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 .判別某個(gè)目標(biāo)是否是類的實(shí)例isinstance(a1, A)2判別兩個(gè)目標(biāo)是否是否完全一致(意思為:判別兩個(gè)變量引證的地址是否相同,假如相同,則兩個(gè)變量實(shí)踐引證為同一目標(biāo))用is進(jìn)行判別a3 = a1print a1 is a33判別兩個(gè)目標(biāo)中的內(nèi)容是否相同用=進(jìn)行判別print al = a2依照關(guān)鍵詞排序L1 = p1, p2, p3L2 = sorted(L1,key=lambda x:)在定義Perso斐時(shí),可以為Perso類添加一個(gè)特殊的_i
21、nit_偽法,當(dāng)創(chuàng)建實(shí)例時(shí),_init_偽法被自動(dòng)調(diào)用,我們就能在此為每個(gè)實(shí)例都統(tǒng)一加上以下屬性:class Person(object):def _init_ (self, name, gender, birth): = nameself.gender = genderself.birth = birth_init_方法的第一個(gè)參數(shù)必須是 self (也可以用別的名字,但建議使用習(xí)慣用法),后續(xù)參數(shù)則可以自由指定,和定義函數(shù)沒有任何區(qū)別。解釋器內(nèi)部會(huì)將*kw拆分成對應(yīng)的diet.setattr(方法接受3個(gè)參數(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)的,如果一個(gè)屬性由雙下劃線開頭(_)該屬性就無法
23、被外部訪問??蠢樱篶lass 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類時(shí),能夠直接從Person類承繼:class Perso
25、n(object):def _init_(self, name, gender): = nameself.gender = gender界說Student類時(shí),只需求把額定的特點(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 種。要?jiǎng)?chuàng)立多進(jìn)程形式的TCPServer :class MyTCPServer(TCPSe
28、rver, ForkingMixin)pass要?jiǎng)?chuàng)立多線程形式的UDPServer :class MyUDPServer(UDPServer, ThreadingMixin):pass多重 class BStudent(Student,BasketballMixin):PassClassC(A,B)返回屬性:對于實(shí)例變量,dir()返回所有實(shí)例屬性,包括' _class_這類有特殊意義的屬性。注意到方法 'whoAm也是s的一個(gè)屬性。首先可以用type()l數(shù)獲取變量的類型,它返回一個(gè)Type寸象。dir()返回的屬性是字符串列表,如果已知一個(gè)屬性名稱,要獲取或者設(shè)置對象的屬性
29、,就需要用getattr(和setattr(函數(shù)了對int、str等內(nèi)置數(shù)據(jù)類型排序時(shí),Pytho的sorted儆照默認(rèn)的比較函數(shù) cmp#序,但是,如果對一組 Stude蘸的實(shí)例排序時(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(,)如果一個(gè)類表現(xiàn)得像一個(gè)list,要獲取有多少個(gè)元素,就得用len()函數(shù)。a, b = b, a +b實(shí)就是多個(gè)變量的賦值運(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ù),能夠用一個(gè) 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)識(shí),如_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第個(gè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度商業(yè)地產(chǎn)項(xiàng)目地下車位使用權(quán)轉(zhuǎn)讓合同4篇
- 2025產(chǎn)業(yè)園項(xiàng)目幕墻二次深化設(shè)計(jì)、監(jiān)理及驗(yàn)收服務(wù)合同2篇
- 2024年縫紉設(shè)備及相關(guān)技術(shù)咨詢合同
- 2025年度新能源汽車買賣及售后服務(wù)合同4篇
- 2025年度智能車庫門購銷安裝一體化服務(wù)合同4篇
- 2025年度智能安防監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)施合同4篇
- 2024鐵路信號(hào)設(shè)備更新改造工程合同文本3篇
- 中國醫(yī)用呼吸機(jī)行業(yè)市場調(diào)查研究及投資戰(zhàn)略咨詢報(bào)告
- 中國家居百貨行業(yè)市場調(diào)查研究及投資前景預(yù)測報(bào)告
- 2025年度個(gè)人房屋抵押貸款合同終止協(xié)議4篇
- C及C++程序設(shè)計(jì)課件
- 帶狀皰疹護(hù)理查房
- 公路路基路面現(xiàn)場測試隨機(jī)選點(diǎn)記錄
- 平衡計(jì)分卡-化戰(zhàn)略為行動(dòng)
- 國家自然科學(xué)基金(NSFC)申請書樣本
- 幼兒教師干預(yù)幼兒同伴沖突的行為研究 論文
- 湖南省省級溫室氣體排放清單土地利用變化和林業(yè)部分
- 材料設(shè)備驗(yàn)收管理流程圖
- 培訓(xùn)機(jī)構(gòu)消防安全承諾書范文(通用5篇)
- (完整版)建筑業(yè)10項(xiàng)新技術(shù)(2017年最新版)
- 第8期監(jiān)理月報(bào)(江蘇版)
評論
0/150
提交評論