python基础(文件、异常、模块、类、对象)
文件:
- 打開文件使用open函數(shù),open()的第一個參數(shù)是:要打開文件的路徑,如果只傳入文件名那么將在當(dāng)前文件下查找文件并打開。第二個參數(shù)是:文件的打開模式,其他參數(shù)都是默認的。文件的打開模式如下圖所示:
文件的讀取操作:
需要用到以下幾個文件對象方法:
模塊:
- 模塊就是可用代碼段的打包,模塊是一個包含你所定義的所有函數(shù)和變量的文件,后綴是.py。模塊可以被別的程序引入,以使用該模塊中的函數(shù)等功能。
- 我們所知道常用的操作系統(tǒng)就有:Windows、Mac OS、Linux、UNIX等,這些操作系統(tǒng)底層對于文件系統(tǒng)的訪問工作原理是不一樣的,因此你可能就要針對不同的操作系統(tǒng)來考慮使用哪些文件系統(tǒng)模塊,這樣的做法非常不友好且麻煩,因為這樣意味著當(dāng)你的程序運行環(huán)境一改變,你就要相應(yīng)的去修改大量代碼來應(yīng)付。那么有了OS模塊,我們不需要關(guān)心什么操作系統(tǒng)下使用什么模塊,OS模塊會幫助你選擇正確的模塊并調(diào)用。
os模塊中關(guān)于文件/目錄常用的函數(shù)使用方法
pickle模塊:
這個模塊幾乎可以將prthon的對象轉(zhuǎn)化為二進制的形式取放字節(jié)流。
存放:picking,讀取:unpicking,pickle模塊的使用:
異常處理:
Python標準異常總結(jié)
- AssertionError 斷言語句(assert)失敗
- AttributeError 嘗試訪問未知的對象屬性
- EOFError 用戶輸入文件末尾標志EOF(Ctrl+d)
- FloatingPointError 浮點計算錯誤
- GeneratorExit generator.close()方法被調(diào)用的時候
- ImportError 導(dǎo)入模塊失敗的時候
- IndexError 索引超出序列的范圍
- KeyError 字典中查找一個不存在的關(guān)鍵字
- KeyboardInterrupt 用戶輸入中斷鍵(Ctrl+c)
- MemoryError 內(nèi)存溢出(可通過刪除對象釋放內(nèi)存)
- NameError 嘗試訪問一個不存在的變量
- NotImplementedError 尚未實現(xiàn)的方法
- OSError 操作系統(tǒng)產(chǎn)生的異常(例如打開一個不存在的文件)
- OverflowError 數(shù)值運算超出最大限制
- ReferenceError 弱引用(weak reference)試圖訪問一個已經(jīng)被垃圾回收機制回收了的對象
- RuntimeError 一般的運行時錯誤
- StopIteration 迭代器沒有更多的值
- SyntaxError Python的語法錯誤
- IndentationError 縮進錯誤
- TabError Tab和空格混合使用
- SystemError Python編譯器系統(tǒng)錯誤
- SystemExit Python編譯器進程被關(guān)閉
- TypeError 不同類型間的無效操作
- UnboundLocalError 訪問一個未初始化的本地變量(NameError的子類)
- UnicodeError Unicode相關(guān)的錯誤(ValueError的子類)
- UnicodeEncodeError Unicode編碼時的錯誤(UnicodeError的子類)
- UnicodeDecodeError Unicode解碼時的錯誤(UnicodeError的子類)
- UnicodeTranslateError Unicode轉(zhuǎn)換時的錯誤(UnicodeError的子類)
- ValueError 傳入無效的參數(shù)
- ZeroDivisionError 除數(shù)為零
程序運行過程中可能會拋出某些異常,但是這些異常不會使程序崩潰。那么如何檢測和處理這些異常呢?
- 異常的檢測可以使用try語句,try語句捕獲到異常時,異常后面的語句將不會被執(zhí)行會被跳過。
栗子:
- 另一個實現(xiàn)方式
栗子:
try:f=open("C:\\Users\\Lenovo\\Desktop\\hhhh.txt","w")sum=1+'1'f.close() except (OSError,TypeError):print("出錯") finally:#這里面的語句無論如何都會被執(zhí)行f.close()#防止因異常退出而文件沒有被關(guān)閉,而導(dǎo)致數(shù)據(jù)丟失- 可以使用raise語句自己引發(fā)一個異常,只需要在raise后面加上一個異常的名稱就好。例如:raise ZeroDivisionError引發(fā)除0異常。也可以:raise ZeroDivisionError("除數(shù)為0")
豐富的else語句:
else語句可以和if語句配合使用:要么怎樣,要么不怎樣。還可以和while、for循環(huán)語句搭配使用:干完了能怎樣,干不完就別想怎樣。還能和異常處理語句搭配使用:沒有問題就干吧。
- 當(dāng)else和循環(huán)配合使用的話,如果循環(huán)里面的代碼正常的執(zhí)行完,沒有使用break等退出,則會執(zhí)行循環(huán)外else后面的代碼。
- 只要try語句塊里面沒有出現(xiàn)任何的異常,將會執(zhí)行else里面的語句
簡潔的with語句:
with在你使用完文件忘記關(guān)閉后,with語句就會幫助你關(guān)閉。
對象:
對象就是屬性加方法,靜態(tài)的特征稱為屬性,動態(tài)行為稱為方法。在pyhton中約定類名以大寫字母開頭,函數(shù)以小寫字母開頭,注意: 如果屬性的名字和方法相同,屬性會將方法覆蓋掉。那么:1、不要試圖在一個類里面定義出所有能想到的特性和方法,應(yīng)該利用繼承和組合機制進行擴展。2、用不同的詞性命名,如屬性用名詞,方法名用動詞。
類的定義:
class Turtle:#屬性color="green"weight=10#方法def climb(self):#self相當(dāng)于C++的this指針,在python中定義類的時候默認self作為第一個參數(shù)print("爬行")t=Turtle()#生成類對象,創(chuàng)建類的實例對象 t.climb()#適用類方法繼承:
是子類自動共享父類之間數(shù)據(jù)和方法的機制,子類繼承父類所有的屬性和方法,如果子類中定義與父類同名的方法或?qū)傩?#xff0c;則會自動覆蓋父類對應(yīng)的方法或?qū)傩?#xff0c;對父類不受影響,當(dāng)子類重寫父類的構(gòu)造方法時,如果還想有父類的功能,那么有兩種方法:1、調(diào)用未綁定的父類方法(只需要在子類構(gòu)造方法中,寫上父類的名字.構(gòu)造方法名稱,調(diào)用父類的構(gòu)造函數(shù)即可)2、使用super函數(shù)(只需要在子類構(gòu)造方法中通過super函數(shù)調(diào)用父類的構(gòu)造方法即可:surper().__init__(),括號里面self也不用寫)。多重繼承: 一個子類繼承多個父類,寫法:class Son(father1,father2,.....)
class MyList (list):pass #pass表示占位符,表示不做任何事情,list表示繼承l(wèi)ist>>> class Parent:def hello(self):print("父類方法在子類中被調(diào)用")>>> class Son(Parent):pass>>> >>> d=Son() >>> d.hello() 父類方法在子類中被調(diào)用>>> class Son(Parent):def hello(self):print("子類覆蓋父類方法")>>> C=Son() >>> C.hello() 子類覆蓋父類方法多態(tài): 不同對象對同一方法響應(yīng)不同的行動。也就是不同類里面定義方法的名相同但是方法的內(nèi)容不同。
>>> class First:def func(self):print("hello")>>> class Second:def func(self):print("你好")>>> a=First() >>> a.func() hello >>> b=Second() >>> b.func >>> b.func() 你好 >>>構(gòu)造函數(shù): 需要用到函數(shù)_ _init_ _(self)方法,在對象實例化時,傳入?yún)?shù),可以重寫_ _init_ _(self)方法來初始化對對象的操作。
class New:def _init_(self,name):self.name=namedef func(self):print("%s爬"%self.name) >>> b=New("給我") >>> b.func() 給我爬公有和私有:
在pyhton中沒有像c++一樣的關(guān)鍵字來說明公有還是私有。默認對象的屬性和方法都是公有的可以通過.操作符訪問,為了實現(xiàn)私有變量的特征,python內(nèi)部采用了name mangling(名字改編,名字重整)技術(shù),在python中定義私有變量只需要在變量名或者函數(shù)名前加上_ _兩個下劃線,那么這個函數(shù)或變量就會為私有的了。這樣外部就無法訪問到了。
>>> class New:__name="小魚醬"#私有的def func(self):return self.__name>>> a=New() >>> a.func() '小魚醬' >>> a._New__name#其實python的私有機制是偽私有,可以通過這種方式訪問私有變量 '小魚醬' >>>組合:把類的實例化給放到新類里面,這樣就把舊類組合進去了
class Turtle:def __init__(self,x):self.num=x class Fish:def __init__(self,x):self.num=x class Pool:def __init__(self,x,y):self.turtle=Turtle(x)#turtle是烏龜?shù)膶嵗瘜ο?/span>self.fish=Fish(y)#fish是小魚的實例化對象def print_num(self):print("水池里總共烏龜有%d只,小魚%d只"% (self.turtle.num,self.fish.num))>>> pool=Pool(1,10) >>> pool.print_num() 水池里總共烏龜有1只,小魚10只什么是綁定?
python嚴格要求方法需要有實例才能被調(diào)用,這種限制其實就是python所謂的綁定概念。
一些與類相關(guān)的BIF:
- issubclass(class,classinfo)如果class是classinfo的一個子類,那么返回True,注意:一個類被認為是其自身的子類,classinfo可以是類對象組成的元組,只要class是其中任何一個候選的子類,則返回True。所有類默認繼承自object。
- isinstance(object,classinfo)用來檢查一個實例對象是否屬于一個類,第一個參數(shù)是實例對象,第二個參數(shù)類,同樣第二個參數(shù)也可以是元組,元組里面有多個類,屬于則返回True否則返回False
- hasattr(object,name)用來測試一個對象里面是否有指定的屬性,第一個參數(shù)是對象,第二個參數(shù)是指定的屬性名,注意:要檢查的屬性名要用字符串括起來,否則編譯器會將其認為變量可能引發(fā)異常。
- getattr(object,name[,default])用來返回對象指定的屬性值,如果屬性不存在同時又沒有設(shè)置default的值,那么她會拋出異常,如果有設(shè)置default的值則會打印default的值。
- setattr(object,name,value)用來設(shè)置對象中指定屬性的值,如果屬性不存在,它會新建這個屬性并且給他賦值,屬性同樣要加單引號。
- delattr(object,name)用來刪除對象中指定的屬性,如果屬性不存在則拋出異常。
- property(fget=None,fset=None,fdel=None,doc=None)是用來通過屬性設(shè)置屬性,返回值是一個屬性。第一個參數(shù)是獲得屬性的方法,第二個參數(shù)是設(shè)置屬性的方法,第三個參數(shù)是刪除屬性的方法。使用如下圖:
小甲魚干貨
總結(jié)
以上是生活随笔為你收集整理的python基础(文件、异常、模块、类、对象)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows驱动加载顺序
- 下一篇: python之按位运算