版權(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)義會很麻煩。為了避免這種情況,我們可以在字符串前面加個前綴 r,表示這是一個 raw 字符串,里面的字符就不需要轉(zhuǎn)義了。如,r'(_)/ (_)/'。如果要表示多行字符串,可以用'
3、9;'.'''表示如果中文字符串在Python環(huán)境下遇到 UnicodeDecodeError,這是因為.py文件保存的格式有問題??梢栽诘谝恍刑砑幼⑨? -*- coding: utf-8 -*-print u'中文'在Python中,布爾類型還可以與其他數(shù)據(jù)類型做 and、or和not運(yùn)算直接用 把list的所有元素都括起來,就是一個list對象。通常,我們會把list賦值給一個變量,這樣,就可以通過變量來引用list索引從 0 開始,也就是說,第一個元素的索引是0,第二個元素的索引是1,以此類推。因此,要打印第一名同
4、學(xué)的名字,用 L0添加 list 的 append() 方法或者insert()方法定位刪除L.pop() 對list中的某一個索引賦值,就可以直接用新的元素替換掉原來的元素,list包含的元素個數(shù)保持不變??s進(jìn)請嚴(yán)格按照Python的習(xí)慣寫法:4個空格,不要使用Tab,更不要混合Tab和空格,否則很容易造成因為縮進(jìn)引起的語法錯誤。if age >= 18:要避免嵌套結(jié)構(gòu)的 if . else .,我們可以用 if . 多個elif . else .的結(jié)構(gòu),一次寫完所有的規(guī)則奇數(shù)加和 for a in L:sum+=a x += 2偶數(shù)不
5、要if x%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)for name,score in s: print name,':',scores.remove():s.add()比較函數(shù)cmp(x,y)如果想讓一個函數(shù)能接受任意個參數(shù),我們就可以定義一個可
6、變參數(shù):def fn(*args): print args可變參數(shù)的名字前面有個 * 號,我們可以傳入0個、1個或多個參數(shù)給可變參數(shù)r.append(Li) 向r添加對這種經(jīng)常取指定索引范圍的操作,用循環(huán)十分繁瑣,因此,Python提供了切片(Slice)操作符,能大大簡化這種操作。對應(yīng)上面的問題,取前3個元素,用一行代碼就可以完成切片:>>> L0:3'Adam', 'Lisa', 'Bart'只用一個 : ,表示從頭到尾:>>> L:切片操作還可以指定第三個參數(shù):&g
7、t;>> L:2'Adam', 'Bart'第三個參數(shù)表示每N個取一個,上面的 L:2 會每兩個元素取出一個來,也就是隔一個取一個。print L4:5-10: 先獲得5的倍數(shù),再取后10個首字母大寫 def firstCharUpper(s): return s:1.upper()+s1:range(1,101)方法是使用 enumerate() 函數(shù):>>> L = 'Adam', 'Lisa', 'Bart', 'Paul'>>> fo
8、r index, name in enumerate(L):. print index, '-', name. 0 - Adam1 - Lisa2 - Bart3 - Pauldict 對象有一個 values() 方法,這個方法把dict轉(zhuǎn)換成一個包含所有value的list,這樣,我們迭代的就是 dict的每一個 value:d = 'Adam': 95, 'Lisa': 85, 'Bart': 59 print d.values()# 85, 95, 59for v in d.(iter)values(): pri
9、nt v# 85# 95# 59items() 方法把dict對象轉(zhuǎn)換成了包含tuple的list,我們對這個list進(jìn)行迭代,可以同時獲得key和valued = 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 n=0sum = 0.0for k, v in d.iteritems(): sum = sum + v n+=1 print k,':',vprint 'average', ':', sum/nx * x for x in r
10、ange(1, 11)變量可以指向函數(shù) f=abs根號 import mathdef add(x, y, f): return f(x) + f(y)print add(25, 9, math.sqrt)map()是 Python 內(nèi)置的高階函數(shù),它接收一個函數(shù) f 和一個 list,并通過把函數(shù) f 依次作用在 list 的每個元素上,得到一個新的 list 并返回。def format_name(s): return s:1.upper()+s1:.lower()print map(format_name, 'adam', 'LISA',
11、 '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,并返回最終結(jié)果值。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
12、 內(nèi)置的另一個有用的高階函數(shù),filter()函數(shù)接收一個函數(shù) f 和一個list,這個函數(shù) f 的作用是對每個元素進(jìn)行判斷,返回 True或 False,filter()根據(jù)判斷結(jié)果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。利用filter(),可以完成很多有用的功能,例如,刪除 None 或者空字符串:def is_not_empty(s): return s and len(s.strip() > 0filter(is_not_empty, 'test', None, '', 's
13、tr', ' ', 'END')根為整數(shù)def is_sqr(x):return math.sqrt(x)%1=0升序 def cmp_ignore_case(s1, s2): if s1.lower()>s2.lower(): return 1 elif s1.lower()<s2.lower(): return -1 else: return 0print sorted('bob', 'about', 'Zoo', 'Credit', cmp_ignore_case)像這種內(nèi)
14、層函數(shù)引用了外層函數(shù)的變量(參數(shù)也算變量),然后返回內(nèi)層函數(shù)的情況,稱為閉包(Closure)。返回閉包不能引用循環(huán)變量,請改寫count()函數(shù),讓它正確返回能計算1x1、2x2、3x3的函數(shù)。def count(): fs = for i in range(1, 4): def f(i): def g(): return i*i return g fs.append(f(i) return fsf1, f2, f3 = count()print f1(), f2(), f3()通過對比可以看出,匿名函數(shù) lambda x: x * x 實際上就是:def f(x): r
15、eturn x * x關(guān)鍵字lambda 表示匿名函數(shù),冒號前面的 x 表示函數(shù)參數(shù)。測試空字符print filter(lambda s:s and len(s.strip() > 0, 'test', None, '', 'str', ' ', 'END')裝飾器newfndef performance(f): def print_time(*args, *kw): print 'call '+f._name_+'() in '+time.strftim
16、e('%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 fn(f): functools.wraps(f) def wrappe
17、r(*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 back return wrapper return fnint()函數(shù)還提供額外的base參數(shù),默認(rèn)值為10。如果傳入base參數(shù),就可以做 N 進(jìn)制的轉(zhuǎn)換:>>> int(
18、39;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)去:def int2(x, base=2): return int(x, base)functools.partial就是幫助我們創(chuàng)建一個偏函數(shù)的,不需要我們自己定義int2(),可以直接使用下面的代碼創(chuàng)建一個新的函數(shù)int2:>>> import functools>>> in
19、t2 = 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利用ImportError錯誤,我們經(jīng)常在Python中動態(tài)導(dǎo)入模塊:try
20、: from cStringIO import StringIOexcept ImportError: from StringIO import StringIOPython 3.x已經(jīng)改進(jìn)了整數(shù)的除法運(yùn)算,“/”除將得到浮點數(shù),“/”除才仍是整數(shù):>>> 10 / 33.3333333333333335>>> 10 / 33要在Python 2.7中引入3.x的除法規(guī)則,導(dǎo)入_future_的division:>>> from _future_ import division>>> print 10 / 33.33333
21、33333333335class A(object)passa1 = A()a2 = A()1.判斷某個對象是否是類的實例isinstance(a1, A)2.判斷兩個對象是否是否完全一致(意思為: 判斷兩個變量引用的地址是否相同,如果相同,則兩個變量實際引用為同一對象)用is進(jìn)行判斷a3 = a1print a1 is a33.判斷兩個對象中的內(nèi)容是否相同用 = 進(jìn)行判斷print a1 = a2按照關(guān)鍵詞排序L1 = p1, p2, p3L2 = sorted(L1,key=lambda x:)在定義 Person 類時,可以為Person類添加一個特殊的_init_()方法,
22、當(dāng)創(chuàng)建實例時,_init_()方法被自動調(diào)用,我們就能在此為每個實例都統(tǒng)一加上以下屬性:class Person(object): def _init_(self, name, gender, birth): = name self.gender = gender self.birth = birth_init_() 方法的第一個參數(shù)必須是 self(也可以用別的名字,但建議使用習(xí)慣用法),后續(xù)參數(shù)則可以自由指定,和定義函數(shù)沒有任何區(qū)別。解釋器內(nèi)部會將*kw拆分成對應(yīng)的dict.setattr()方法接受3個參數(shù):setattr(對象,屬性,屬性的值)s
23、etattr(self,k,v)相當(dāng)于self.k = vkw.iteritems()歷遍字典kw的所有key和value,分別匹配k,v*args 容納任意變量的list*kwargs 容納任意key,value的dictclass Person(object): def _init_(self, name, gender, birth, *kw): =name self.gender=gender self.birth=birth for k,v in kw.iteritems(): setattr(self,k,v)Python對屬性權(quán)限的控制是通過屬性名來實現(xiàn)的,如果
24、一個屬性由雙下劃線開頭(_),該屬性就無法被外部訪問。看例子:class Person(object): def _init_(self, name): = name self._title = 'Mr' self._job = 'Student'class Person(object): def _init_(self, name, score): =name self._score=scorep = Person('Bob', 59)print try: print p._scoreexcep
25、t AttributeError: print 'attributeerror'class Person(object): count=0 def _init_(self,name): =name Person.count+=1p1 = Person('Bob')print Person.countp2 = Person('Alice')print Person.countp3 = Person('Tim')print Person.count如果已經(jīng)定義了Person類,需要定義新的Student和Teache
26、r類時,可以直接從Person類繼承:class Person(object): def _init_(self, name, gender): = name self.gender = gender定義Student類時,只需要把額外的屬性加上,例如score:class Student(Person): def _init_(self, name, gender, score): super(Student, self)._init_(name, gender) self.score = score一定要用 super(Student, self)._init
27、_(name, gender) 去初始化父類,否則,繼承自 Person 的 Student 將沒有 name 和 gender。函數(shù)super(Student, self)將返回當(dāng)前類繼承的父類,即 Person ,然后調(diào)用_init_()方法,注意self參數(shù)已在super()中傳入,在_init_()中將隱式傳遞,不需要寫出(也不能寫)。多重繼承的繼承鏈就不是一棵樹了,它像這樣:class A(object): def _init_(self, a): print 'init A.
28、' self.a = aclass B(A): def _init_(self, a): super(B, self)._init_(a) print 'init B.'class C(A): def _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、UnixS
29、treamServer、UnixDatagramServer,而服務(wù)器運(yùn)行模式有 多進(jìn)程ForkingMixin 和 多線程ThreadingMixin兩種。要創(chuàng)建多進(jìn)程模式的 TCPServer:class MyTCPServer(TCPServer, ForkingMixin) pass要創(chuàng)建多線程模式的 UDPServer:class MyUDPServer(UDPServer, ThreadingMixin): pass多重 class BStudent(Student,BasketballMixin): PassClassC(A,B)
30、返回屬性:對于實例變量,dir()返回所有實例屬性,包括_class_這類有特殊意義的屬性。注意到方法whoAmI也是 s 的一個屬性。首先可以用 type() 函數(shù)獲取變量的類型,它返回一個 Type 對象。dir()返回的屬性是字符串列表,如果已知一個屬性名稱,要獲取或者設(shè)置對象的屬性,就需要用 getattr() 和 setattr( )函數(shù)了對 int、str 等內(nèi)置數(shù)據(jù)類型排序時,Python的 sorted() 按照默認(rèn)的比較函數(shù) cmp
31、60;排序,但是,如果對一組 Student 類的實例排序時,就必須提供我們自己的特殊方法 _cmp_():class Student(object): def _init_(self, name, score): = name self.score = score def _str_(self): return '(%s: %s)' % (, self.score) _repr_ = _str_ def _cmp_(self, s): if < : return -1 e
32、lif > : return 1 else: return 0從低到高return cmp(,)從高到底 return -cmp(,)如果一個類表現(xiàn)得像一個list,要獲取有多少個元素,就得用 len() 函數(shù)。a, b = b, a + b其實就是多個變量的賦值運(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+b=55)a=b=5,b=a+b=86)a=b=8
33、,b=a+b=13要表示有理數(shù),可以用一個Rational類來表示:class Rational(object): def _init_(self, p, q): self.p = p self.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*c return gcs(s,m,c)如果要把 Rational 轉(zhuǎn)為 int,應(yīng)該使用:r = Rational(12, 5)n =
34、int(r)要讓int()函數(shù)正常工作,只需要實現(xiàn)特殊方法_int_():class Rational(object): def _init_(self, p, q): self.p = p self.q = q def _int_(self): return self.p / self.qclass Rational(object): def _init_(self, p, q): self.p = p self.q = q def _int_(self): return self.p / self.q def _float_(self): return self.p*1.0/self.qprint float(Rational(7, 2)print float(Rational(1, 3) 以單下劃線開
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025廣告公司合作協(xié)議合同樣本
- 2025軟件銷售代理合同書
- 2025小型汽車配件購買合同
- 2025公司向個人借款合同范本
- 二零二五年度房地產(chǎn)項目土地租賃及銷售代理協(xié)議3篇
- 2025農(nóng)村家庭土地流轉(zhuǎn)合同分家協(xié)議書樣本2篇
- 公墓生態(tài)葬服務(wù)及配套設(shè)施建設(shè)合同(年度)3篇
- 二零二五年度電子商務(wù)企業(yè)高管平臺運(yùn)營管理聘用合同3篇
- 2025年度房屋維修服務(wù)與社區(qū)環(huán)境改善合作協(xié)議2篇
- 二零二五年度新型塑鋼窗研發(fā)與生產(chǎn)合同3篇
- 2025年國家圖書館招聘筆試參考題庫含答案解析
- 機(jī)器人課程課程設(shè)計
- 南充市市級事業(yè)單位2024年公招人員擬聘人員歷年管理單位遴選500模擬題附帶答案詳解
- 安全知識考試題庫500題(含答案)
- 2024-2025學(xué)年上學(xué)期南京小學(xué)數(shù)學(xué)六年級期末模擬試卷
- 河北省保定市定興縣2023-2024學(xué)年一年級上學(xué)期期末調(diào)研數(shù)學(xué)試題(含答案)
- 2025年中國蛋糕行業(yè)市場規(guī)模及發(fā)展前景研究報告(智研咨詢發(fā)布)
- 護(hù)理組長年底述職報告
- 護(hù)理不良事件分析 課件
- 糖尿病患者健康管理測試試題(三套題-有答案)
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
評論
0/150
提交評論