python學習筆記_第1頁
python學習筆記_第2頁
python學習筆記_第3頁
python學習筆記_第4頁
python學習筆記_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一:range()與xrange()的比較:在 Python 中,range 和 xrange 均可以用來做迭代的范圍,不過 range 返回的是 list,而 xrange 則返回一個 xrange object。如下:>>> type(range(10)<type 'list'>>>> type(xrange(10)<type 'xrange'>>>>xrange()比range()效率更高:因為range返回的是一個list對象,然后再對list對象進行遍歷,而xrange返回的

2、是xrange對象,每次迭代才返回本次迭代的結(jié)果。比如:for x in range(10000):will generate a list of ten thousand elements, and will then loop through each of them in turnfor x in xrange(10000):will genarate ten thousand integers one by one, passing each to the variable x in turn.二:內(nèi)置函數(shù):ord()與chr()可以實現(xiàn)一個字符與ascii之間的轉(zhuǎn)換,比如:>&

3、gt;> ord('a')97>>> chr(97)'a'>>>例如將英文字母放入列表中:>>> list = >>> for i in xrange(ord('a'),ord('z')+1,1):. list.extend(chr(i).>>>注意:chr()與str()的區(qū)別:例如以下代碼:>>> chr(97)'a'>>> str(97)'97'將一個字符串轉(zhuǎn)換為

4、對應的ascii碼值,map比如:>>> map(ord,"abcde")97, 98, 99, 100, 101反過來,比如:>>> map(chr,range(97,101)'a', 'b', 'c', 'd'在將列表中的字符連接起來:>>> "".join(map(chr,range(97,101)'abcd'>>>三、os模塊:1、getcwd():返回一個表示當前工作目錄的字符串,比如: >

5、;>> os.getcwd()'F:films'>>> type(os.getcwd()<type 'str'>2、listdir():返回一個參數(shù)所指定目錄的所有文件名字符串的列表,比如: >>> type(os.listdir(os.getcwd()<type 'list'>>>>>>> os.listdir(os.getcwd()'.metadata', '.project', '.pydevp

6、roject', 'src'>>>四、內(nèi)置數(shù)據(jù)類型:1、list: 注意:使用extend()添加元素時,注意參數(shù)時list,比如:>>> list = >>> list.extend("asdasdsa")>>> list'a', 's', 'd', 'a', 's', 'd', 's', 'a'>>>>>> lis

7、t.extend('adasdsada')>>> list'a', 's', 'd', 'a', 's', 'd', 's', 'a', 'adasdsada'>>>>>> list.extend(213121)Traceback (most recent call last): File "<stdin>", line 1, in <modul

8、e>TypeError: 'int' object is not iterable>>>>>> list.extend("12121")>>> list'a', 's', 'd', 'a', 's', 'd', 's', 'a', 'adasdsada', '1', '2', '1', '2',

9、 '1'>>>在python中,字符串就是一個序列,看成一個列表類型。五、模塊python的模塊-最高級的程序組織單位。1、模塊中的語句: 比如print語句2、模塊的屬性: 內(nèi)置屬性:每個模塊中都有內(nèi)置模塊。比如: >>> dir()'_builtins_', '_doc_', '_name_', '_package_' 自定義屬性:就是在模塊中定義的屬性。比如:>>> count = 0>>> str = "i love you&

10、quot;>>> dir()'_builtins_', '_doc_', '_name_', '_package_', 'count', 'str' 3、模塊中的函數(shù): 內(nèi)置函數(shù):可以在模塊中直接調(diào)用。一些常用內(nèi)置函數(shù),比如:range() 與xrange() 以下常用內(nèi)置函數(shù):§ help(obj) 在線幫助, obj可是任何類型   § callable(obj) 查看一個obj是不是可以像函數(shù)一樣調(diào)用  

11、§ repr(obj) 得到obj的表示字符串,可以利用這個字符串eval重建該對象的一個拷貝   § eval_r(str) 表示合法的python表達式,返回這個表達式   § dir(obj) 查看obj的name space中可見的name   § hasattr(obj,name) 查看一個obj的name space中是否有name   § getattr(obj,name) 得到一個obj的name space中

12、的一個name   § setattr(obj,name,value) 為一個obj的name space中的一個name指向vale這個object   § delattr(obj,name) 從obj的name space中刪除一個name   § vars(obj) 返回一個object的name space。用dictionary表示   § locals() 返回一個局部name space,用dictionary表示 

13、60; § globals() 返回一個全局name space,用dictionary表示   § type(obj) 查看一個obj的類型   § isinstance(obj,cls) 查看obj是不是cls的instance   § issubclass(subcls,supcls) 查看subcls是不是supcls的子類 類型轉(zhuǎn)換函數(shù):§ chr(i) 把一個ASCII數(shù)值,變成字符   § ord(i) 把一個字

14、符或者unicode字符,變成ASCII數(shù)值   § oct(x) 把整數(shù)x變成八進制表示的字符串   § hex(x) 把整數(shù)x變成十六進制表示的字符串   § str(obj) 得到obj的字符串描述   § list(seq) 把一個sequence轉(zhuǎn)換成一個list   § tuple(seq) 把一個sequence轉(zhuǎn)換成一個tuple   § dict(),dict(list) 轉(zhuǎn)換成一個dictiona

15、ry   § int(x) 轉(zhuǎn)換成一個integer   § long(x) 轉(zhuǎn)換成一個long interger   § float(x) 轉(zhuǎn)換成一個浮點數(shù)   § complex(x) 轉(zhuǎn)換成復數(shù)   § max(.) 求最大值   § min(.) 求最小值 自定義函數(shù):自己定義的函數(shù),使用關(guān)鍵字def定義的,不需要定義返回類型,Python能返回任何類型。比如:>>> def fu

16、nc():. print "hello world !".>>> func()hello world ! lambda函數(shù): 格式如下:lambda arg1,arg2, : 表達式比如:>>> g = lambda x,y : x*y>>> print g(12,12)144>>> print g<function <lambda> at 0x00DEE930> 表示:lambda語句構(gòu)建的其實是一個函數(shù)對象比如以下的一些應用:>>> foo = 1,2,4,

17、5,6,7,8,9,10>>> print filter(lambda x:x%2=0,foo)2, 4, 6, 8, 10>>>>>> print map(lambda x:x+10,foo)11, 12, 14, 15, 16, 17, 18, 19, 20>>>>>> print reduce(lambda x,y:x+y,foo)52>>> generator函數(shù):該函數(shù)的定義域普通函數(shù)的定義沒有什么區(qū)別,只是在函數(shù)體內(nèi)使用yield生成數(shù)據(jù)項即可。 與yield關(guān)鍵字的使用。&

18、gt;>> def gene():. for i in range(10):. yield i 使用了yield關(guān)鍵字 .>>>>>> print gene()<generator object gene at 0x00DE2B70> #表示是generator函數(shù)對象>>>使用for循環(huán)對generator進行遍歷,如下:>>> for i in gene():. print i.0123456789>>>使用generator函數(shù)對象中next()方法遍歷,如下:>>

19、;> generator = gene()>>> print generator.next()0>>> print generator.next()1>>> print generator.next()2>>> print generator.next().>>> print generator.next()Traceback (most recent call last): File "<stdin>", line 1, in <module>StopI

20、terationYield與return的區(qū)別:如下代碼:>>> def func():. for i in range(5):. return i.>>>>>> print func()0>>>而yield:>>> def func():. for i in range(5):. return i.>>>>>> print func()0>>>yield關(guān)鍵字:包含yield語句的函數(shù)會被特地編譯成生成器。當函數(shù)被調(diào)用時,他們返回一個生成器對象,這個

21、對象支持迭代器接口。函數(shù)也許會有個return語句,但它的作用是用來yield產(chǎn)生值的。六、python中的變量和常量: 常量:Python中不像java使用關(guān)鍵字(static final)來聲明一個常量,python中沒有提供關(guān)鍵字,可以自己定義個常量類來存放常量 局部變量:通常是在函數(shù)或者類的方法中直接使用,在該函數(shù)或者類方法之外,不能引用該變量。 全局變量:在程序文件中任何地方都可以引用,包括函數(shù)和類的內(nèi)部;但是如果在函數(shù)和類中對全局變量賦值,必須在該函數(shù)或者類中聲明該變量為全局變量,否則經(jīng)過賦值操作后,變量為本地變量。重點:如果在函數(shù)或類中對全局變量進行了賦值,則該全局變量就變成了局

22、部變量,無論是在引用該變量之前還是在引用該變量之后。如果在函數(shù)或類中未對全局變量進行賦值操作,那么對于該函數(shù)來說,此變量是一個全局變量。所以,這時有一個問題,怎樣才能在函數(shù)或類中對全局變量進行重新賦值呢?這時就要使用到global關(guān)鍵字。global的作用是:聲明為全局變量,那么無論是否對其進行了賦值操作,該變量都將作為全局變量。在函數(shù)或類中使用global聲明的變量,就為全局變量,比如:>>> def func():. global aaaa. print aaaa.>>>>>> func()>>> print aaaa

23、>>>七、python中的面向?qū)ο螅?、self關(guān)鍵字: 類中的方法必須有一個self參數(shù)。2、屬性和方法 訪問權(quán)限:python中的私有屬性和私有方法不像java中的私有屬性,使用private修飾符,而是在屬性或方法的名字前面使用兩個下劃線表示私有性。比如_price,_grow()分別表示的是私有屬性和私有方法。類的外部不能訪問私有屬性。 怎樣訪問類中的私有屬性: 格式:Instance._classname_attribute,比如:apple._Fruit_color 通常不采用以上做法來訪問私有屬性,而是與java一樣,通過setter與getter實現(xiàn)。 屬法:

24、 類屬性可以被類訪問,也可以被實例對象訪問,但是實例屬性只能被實例訪問。與java不同的是,java中使用static關(guān)鍵字修飾類屬性,而python中不使用任何修飾符,只要聲明一下就可以,但是實例屬性要使用self關(guān)鍵字作為前綴的。 實例屬性:以self作為前綴的屬性。 類屬性:直接聲明的變量,python中類屬性都能被類和對象訪問。 類的內(nèi)置屬性:用于管理內(nèi)的內(nèi)部關(guān)系,比如:_dict_、_base_、_doc_ 方法: 類中的方法至少要有一個參數(shù),調(diào)用時不必給該參數(shù)賦值,該參數(shù)就是self。相當于java中的this關(guān)鍵字。 Self:用于區(qū)分函數(shù)和類的方法。注意函數(shù)要與方法區(qū)分開來。

25、靜態(tài)方法: Python使用函數(shù)staticmethod()或 staticmethod把普通的函數(shù)轉(zhuǎn)換為靜態(tài)方法。比如: staticmethod def getPrice(): print Fruit.price def _getPrice(): Fruit.price = Fruit.price + 10 print Fruit.price count = staticmethod(_getPrice)注意:python的靜態(tài)方法沒有和類的實例進行名稱綁定,python的靜態(tài)方法相當于全局函數(shù)。 類方法:Python使用函數(shù)classmethod()或 classmethod把方法轉(zhuǎn)換為

26、靜態(tài)方法,這時的方法必須要有參數(shù)。比如: classmethod def getPrice(self): print Fruit.price def _getPrice(self): Fruit.price = Fruit.price + 10 print Fruit.price count = classmethod(_getPrice)3、類中的構(gòu)造函數(shù):_init_()4、析構(gòu)函數(shù):_del_() 顯示釋放對象占用的資源,是一種釋放資源的方法。默認自動執(zhí)行。如果程序中不提供析構(gòu)函數(shù),會在后臺提供默認的析構(gòu)函數(shù)。5、垃圾回收機制:Python使用gc模塊。6、類的內(nèi)置方法: _init_(

27、self,):初始化對象,在創(chuàng)建新對象時調(diào)用 _new_():在_init_()之前被調(diào)用,用于生產(chǎn)實例對象。 _getitem_(self,key):把類中的屬性定義為序列 _str_:使用print語句時被調(diào)用,打印對象的信息,類似于java中object中的toString()方法。該方法中必須使用return語句。7、方法的動態(tài)特性:將一個已經(jīng)定義好的函數(shù)添加到類中,還可以對已經(jīng)定義好的方法進行修改。語法如下: Class_name.method_name = function_name Class_name:類名 Method_name:新的方法名 Function_name:已經(jīng)定

28、義好的函數(shù)添加與修改的語法一樣,只是method_name表示的含義不一樣,添加表示新的名稱,修改表示已存在的方法名。修改的時候,原來的類中方法的名字不變,只是將方法中的內(nèi)容改變。 比如: class Fruit4: passdef add(self): print "grow."if _name_ = "_main_": Fruit4.grow = add fruit4 = Fruit4() fruit4.grow()8、繼承: 在類名后使用一對括號表示繼承關(guān)系。 如果在父類中定義了_init_方法,子類在自己的_init_方法中必須顯示調(diào)用父類中的_

29、init_方法,如果子類要擴展父類中的行為,可以添加_init_方法的參數(shù)。 比如: class Apple(Fruit): def _init_(self,color): Fruit._init_(self) 調(diào)用父類中的_init_方法類似于java中的super關(guān)鍵字,在java中,首先實例化父類,再實例化子類。這就是為什么要在子類的_init_中顯示調(diào)用父類的_init_了。 在java中使用super關(guān)鍵字來調(diào)用父類中的構(gòu)造方法,在子類的無參構(gòu)造方法中,通常都隱藏了super,那么在python中還可以使用super類的super()調(diào)用父類的_init_方法。 在使用super時,

30、父類要繼承object。因為super類的實現(xiàn)代碼繼承了object,所以父類必須繼承object。 Super的語法:super(type,obj) type:某個類 obj:通常是type類的實例化對象,通常使用self關(guān)鍵字表示。 例子:class Fruit(object): def _init_(self,args): print "parent %s" %argsclass Apple(Fruit): def _init_(self,args): super(Apple,self)._init_(args) print "child"if _

31、name_ = "_main_": Apple("+") 如果在子類中沒寫_init_方法時,當子類在實例化時,會調(diào)用父類中的_init_方法,所以在使用時,就應該在子類中寫上_init_方法。在python中,是支持多繼承的。語法:class_name(parent_class1,parent_class2,.)在多重繼承中,子類只會調(diào)用第一個被繼承的類的_init_,即parent_class1類中的_init_方法。比如以下代碼:class Fruit(object): def _init_(self): print "initializ

32、e Fruit" def grow(self): print "grow ."class Vegetable(object): def _init_(self): print "initialize Vegetable" def plant(self): print "plant ."class Watermelon(Fruit,Vegetable): passif _name_ = "_main_": w = Watermelon() w.grow() w.plant()9、抽象類: 抽象類有抽象方法組成。 Java中抽象類不可以實例化,通過子類實例化。Python也是。 在java中可以使用abstract修飾符來聲明抽象類,而python中只能用一個普通類來表示,怎樣來聲明一個抽象類呢?可以通過python的NotImplementedError類來模擬抽象類。 NotImplementError類繼承自Python運行時錯誤類RuntimeError。 在python中實現(xiàn)抽象類是這樣的:如果對該類進行實例化時,就拋出異常。比如代碼:#抽象類class Fruit: def _init_(self

溫馨提示

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

評論

0/150

提交評論