"""
有時候咱們須要將咱們保存的文本恢復爲一個字典或者序列,Python爲此提供了一個pickle包解決此問題;
存放咱們叫作pickling;
讀取:unpickling;
pkl是pickle簡寫
"""python
import pickle
my_list=[122,23234,'python']
pickle_file = open('my_list.pkl','wb')#使用wb形式
pickle.dump(my_list,pickle_file)#倒入文件,也就是寫入文件
pickle_file.close()#關閉文件,執行完此步驟後會生成一個my_list.pkl的二進制文件,可使用ue打開;函數
#讀取
pickle_file = open('my_list.pkl','rb')#注意是rb
my_list = pickle.load(pickle_file)
print(my_list)#[122, 23234, 'python']
pickle_file.close()
my_lsit=['hello']
#assert len(my_lsit)!=1 不等於1時引起異常
try:
f = open('22.txt')
f.close()
except OSError as reason:#OSError表明監控哪一類異常
print('文件出錯:'+str(reason))#文件出錯:[Errno 2] No such file or directory: '22.txt'
finally:#不管如何此語句都會被執行
print('這裏處理諸如文件沒有關閉之類狀況,好比關閉文件')測試
#else語句基本與c相同,但進行了擴展,能夠和while,for,異常配合使用,但在循環中只有執行完了循環纔會被執行;
#注意for調用和while是相同的
def testFunc(num):
while num>1:
if(num%2==0):
print('未執行完成while')
break
print('正常執行完成while')
else:#也就是說else要執行必須保證while全部代碼被執行完成,而不是遇到中途跳出;
print('執行完while後被執行')
#這裏處理諸如文件沒有關閉之類狀況,好比關閉文件
#執行完while後被執行
testFunc(1)
testFunc(2)#未執行完成whilethis
try:
int('123')
except ValueError as reason:
print('出錯啦')
else:
print('運行正常')#這裏只有不異常時纔會被執行,和循環語句一個道理對象
#with主要目的是簡化運算以及防止某些異常,如:
try:
with open('22.txt','rb') as f:#局部做用
print('open')
except:
print('failed')繼承
class Objectx:#類名大寫
__age__=18#變量默認爲公有,若是須要私有則使用兩個雙下劃線
def name(self,a):#self就是this,代表是哪個對象在調用方法
age = a
ob = Objectx()#注意定義方式與c不一樣。
ob.name(88)
class sun(Objectx):#繼承類,y=也能夠繼承內建庫中的類;
passit
class father():
def __init__(self):
pass
class sub(father):#Python支持多重繼承
def __init__(self):
father.__init__(self)#調用父類構造初始化,這裏的self是子類的self,注意不是父類的;但須要指定傳遞參數
super().__init__()#自動尋找基類方法進行初始化
s = sub()class
#組合
class Tutle:
def __init__(self,x):
self.num = xtest
class Fish:
def __init__(self,x):
self.num = x
class Pool:
def __init__(self,x,y):
self.tutle = Tutle(x)
self.fish = Fish(y)
def print_num(self):#若是不加self,則至關於c的靜態函數,調用方式是Pool.print_num()
print(self.tutle.num,self.fish.num)
p = Pool(1,8)
p.print_num()import
#迭代器:序列,字典,python提供了兩個內建操做,iter(),next(),next到最後會拋出異常
for i in 'hello':
print(i)
links={'百度':'wwww.baidu.com',"bing":'wwww.bing.com.cn'}
for i in links:
print(i,links[i])
class Fish:
def __init__(self):
self.a =0
self.b =1
def __iter__(self):
return self
def __next__(self):
self.a,self.b=self.b,self.a+self.b
return self.a
fish =Fish()
for i in fish:
if i<100:
print(i)
else:
break
#生成器:
def myFun():
print('excute')
yield 1#跟return相同,只是函數只是暫時掛起,再次執行時接着以前執行
yield 2
f = myFun()
next(f)
next(f)
#__main__ #if __name__ == '__main__' 主要是導入模塊時防止該模塊測試函數被調用 #__name__表明模塊的名字,加上此句話代表該模塊只被導入不執行;