python --涓婁笅鏂囩鐞嗗櫒,,鏍囩锛?/p>杞


鏍囩锛?/p>

杞嚜锛歨ttp://www.cnblogs.com/vamei/archive/2012/11/23/2772445.html

涓婁笅鏂囩鐞嗗櫒(context manager)鏄疨ython2.5寮€濮嬫敮鎸佺殑涓€绉嶈娉曪紝鐢ㄤ簬瑙勫畾鏌愪釜瀵硅薄鐨勪娇鐢ㄨ寖鍥淬€備竴鏃﹁繘鍏ユ垨鑰呯寮€璇ヤ娇鐢ㄨ寖鍥达紝浼氭湁鐗规畩鎿嶄綔琚皟鐢?(姣斿涓哄璞″垎閰嶆垨鑰呴噴鏀惧唴瀛?銆傚畠鐨勮娉曞舰寮忔槸with...as...

鍏抽棴鏂囦欢

鎴戜滑浼氳繘琛岃繖鏍风殑鎿嶄綔锛氭墦寮€鏂囦欢锛岃鍐欙紝鍏抽棴鏂囦欢銆傜▼搴忓憳缁忓父浼氬繕璁板叧闂枃浠躲€備笂涓嬫枃绠$悊鍣ㄥ彲浠ュ湪涓嶉渶瑕佹枃浠剁殑鏃跺€欙紝鑷姩鍏抽棴鏂囦欢銆?/p>

涓嬮潰鎴戜滑鐪嬩竴涓嬩袱娈电▼搴忥細

# without context manager
f = open("new.txt", "w")print(f.closed) # whether the file is open
f.write("Hello World!")f.close()
print(f.closed)

浠ュ強锛?/p>

# with context manager
with open("new.txt", "w") as f:
print(f.closed) f.write("Hello World!")
print(f.closed)

涓ゆ绋嬪簭瀹為檯涓婃墽琛岀殑鏄浉鍚岀殑鎿嶄綔銆傛垜浠殑绗簩娈电▼搴忓氨浣跨敤浜嗕笂涓嬫枃绠$悊鍣?(with...as...)銆備笂涓嬫枃绠$悊鍣ㄦ湁闅跺睘浜庡畠鐨勭▼搴忓潡銆傚綋闅跺睘鐨勭▼搴忓潡鎵ц缁撴潫鐨勬椂鍊?涔熷氨鏄笉鍐嶇缉杩?锛屼笂涓嬫枃绠$悊鍣ㄨ嚜鍔ㄥ叧闂簡鏂囦欢 (鎴戜滑閫氳繃f.closed鏉ユ煡璇㈡枃浠舵槸鍚﹀叧闂?銆傛垜浠浉褰撲簬浣跨敤缂╄繘瑙勫畾浜嗘枃浠跺璞鐨勪娇鐢ㄨ寖鍥淬€?/p>

涓婇潰鐨勪笂涓嬫枃绠$悊鍣ㄥ熀浜巉瀵硅薄鐨刜_exit__()鐗规畩鏂规硶(杩樿寰楁垜浠浣曞埄鐢ㄧ壒娈婃柟娉曟潵瀹炵幇鍚勭璇硶锛熷弬鐪?a href="http://www.cnblogs.com/vamei/archive/2012/11/19/2772441.html">鐗规畩鏂规硶涓庡鑼冨紡)銆傚綋鎴戜滑浣跨敤涓婁笅鏂囩鐞嗗櫒鐨勮娉曟椂锛屾垜浠疄闄呬笂瑕佹眰Python鍦ㄨ繘鍏ョ▼搴忓潡涔嬪墠璋冪敤瀵硅薄鐨刜_enter__()鏂规硶锛屽湪缁撴潫绋嬪簭鍧楃殑鏃跺€欒皟鐢╛_exit__()鏂规硶銆傚浜庢枃浠跺璞鏉ヨ锛屽畠瀹氫箟浜哶_enter__()鍜宊_exit__()鏂规硶(鍙互閫氳繃dir(f)鐪嬪埌)銆傚湪f鐨刜_exit__()鏂规硶涓紝鏈塻elf.close()璇彞銆傛墍浠ュ湪浣跨敤涓婁笅鏂囩鐞嗗櫒鏃讹紝鎴戜滑灏变笉鐢ㄦ槑鏂囧叧闂璮鏂囦欢浜嗐€?/p>

鑷畾涔?/h3>

浠讳綍瀹氫箟浜哶_enter__()鍜宊_exit__()鏂规硶鐨勫璞¢兘鍙互鐢ㄤ簬涓婁笅鏂囩鐞嗗櫒銆傛枃浠跺璞鏄唴缃璞★紝鎵€浠鑷姩甯︽湁杩欎袱涓壒娈婃柟娉曪紝涓嶉渶瑕佽嚜瀹氫箟銆?/p>

涓嬮潰锛屾垜浠嚜瀹氫箟鐢ㄤ簬涓婁笅鏂囩鐞嗗櫒鐨勫璞★紝灏辨槸涓嬮潰鐨刴yvow锛?/p>

鎶€鏈垎浜? src=
# customized objectclass VOW(object):    def __init__(self, text):        self.text = text    def __enter__(self):        self.text = "I say: " + self.text    # add prefix        return self                          # note: return an object    def __exit__(self,exc_type,exc_value,traceback):        self.text = self.text + "!"          # add suffixwith VOW("I鈥榤 fine") as myvow:    print(myvow.text)print(myvow.text)
鎶€鏈垎浜? src=

鎴戜滑鐨勮繍琛岀粨鏋滃涓?

I say: I鈥榤 fineI say: I鈥榤 fine!

鎴戜滑鍙互鐪嬪埌锛屽湪杩涘叆涓婁笅鏂囧拰绂诲紑涓婁笅鏂囨椂锛屽璞$殑text灞炴€у彂鐢熶簡鏀瑰彉(鏈€鍒濈殑text灞炴€ф槸"I鈥榤 fine")銆?/p>

__enter__()杩斿洖涓€涓璞°€備笂涓嬫枃绠$悊鍣ㄤ細浣跨敤杩欎竴瀵硅薄浣滀负as鎵€鎸囩殑鍙橀噺锛屼篃灏辨槸myvow銆傚湪__enter__()涓紝鎴戜滑涓簃yvow.text澧炲姞浜嗗墠缂€ ("I say: ")銆傚湪__exit__()涓紝鎴戜滑涓簃yvow.text澧炲姞浜嗗悗缂€("!")銆?/p>

娉ㄦ剰: __exit__()涓湁鍥涗釜鍙傛暟銆傚綋绋嬪簭鍧椾腑鍑虹幇寮傚父(exception)锛宊_exit__()鐨勫弬鏁颁腑exc_type,exc_value,traceback鐢ㄤ簬鎻忚堪寮傚父銆傛垜浠彲浠ユ牴鎹繖涓変釜鍙傛暟杩涜鐩稿簲鐨勫鐞嗐€傚鏋滄甯歌繍琛岀粨鏉燂紝杩欎笁涓弬鏁伴兘鏄疦one銆傚湪鎴戜滑鐨勭▼搴忎腑锛屾垜浠苟娌℃湁鐢ㄥ埌杩欎竴鐗规€с€?/p>

鎬荤粨锛?/h3>

閫氳繃涓婁笅鏂囩鐞嗗櫒锛屾垜浠帶鍒跺璞″湪绋嬪簭涓嶅悓鍖洪棿鐨勭壒鎬с€備笂涓嬫枃绠$悊鍣?with EXPR as VAR)澶ц嚧鐩稿綋浜庡涓嬫祦绋?

鎶€鏈垎浜? src=
# with EXPR as VAR:VAR = EXPRVAR = VAR.__enter__()try:    BLOCKfinally:    VAR.__exit__()
鎶€鏈垎浜? src=

鐢变簬涓婁笅鏂囩鐞嗗櫒甯︽潵鐨勪究鍒╋紝瀹冩槸涓€涓€煎緱浣跨敤鐨勫伐鍏枫€?/p>

python --涓婁笅鏂囩鐞嗗櫒

鏍囩锛?/p>

鍘熸枃鍦板潃锛歨ttp://www.cnblogs.com/saryli/p/5025206.html

相关内容

    暂无相关文章

评论关闭