上下文管理協議:
with obj as f:
'**塊'
1.with obj ----》觸發obj.__enter__(),拿到返回值
2.as f----->f=返回值、
3.with obj as f 等同於 f=obj.__enter__()
4.執行**塊
一:沒有異常的情況下,整個**塊執行完畢後去觸發__exit__,它的三個引數都為none
二:有異常的情況下,從異常出現的位置直接觸發__exit__
a:如果__exit__的返回值為true,代表吞掉了異常,程式繼續執行
b:如果__exit__的返回值不為true,代表吐出了異常,__exit__的的執行完畢就代表了整個with語句的執行完畢
classfoo:
def__init__
(self,name):
self.name=name
def__enter__
(self):
print('
執行enter')
return
self
def__exit__
(self, exc_type, exc_val, exc_tb):
print('
執行exit')
(exc_type) #異常型別
(exc_val) #異常值
(exc_tb) #追蹤資訊
return
true
with foo(
'a.txt
') as f:
(f)
print(asd) #
觸發__exit__,如果返回true,**塊執行完畢,程式繼續執行
(f.name)
print('
-----------------')
print('
0000
')
使用場景:定製釋放資源機制,網路連線和鎖的程式設計環境
第十八節 動態協議 OSPF
第十八節 動態協議 ospf b ospf的資料封裝格式 d ospf和rip比較 e 鏈路狀態演算法的路由計算過程 f ospf的報文格式 g 鄰居和鄰接的關係 h ospf的網路型別 a 基本配置 假設 我又開兩台路由器 1 開啟ospf程序 ospf就行 預設為1 後面可以指定程序號,例如 o...
第十八節 快取
本節將通過對 2019 11 05 mynopcommerce vs19core2.2nop4.20 不刪,014 新增一些中介軟體的定義 程式進行重構,從而來實現授權功能。重構nop.web.framework.infrastructure.dependencyregistrar 類,重新定義 r...
上下文管理協議
class open def init self,name self.name name def enter self print 執行enter def exit self,exc type,exc val,exc tb print 執行exit with open a.txt as f with...