电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python上下文管理器Content Manager

瀏覽:104日期:2022-06-15 17:40:50

在 Python 中,我們會經常聽到上下文管理器(Context Manager),那我們探討下這是什么,又有什么功能。

在 Python 中的上下文管理器中,使用 with 打開文件是使用最多的,其中離開 with 包含的語句后會執行一些類似于清理的工作,如關閉文件,關閉連接對象等操作。

實踐

我們在代碼實踐的時候,忽略了在同一代碼片段中,先打開文件,然后直接對文件進行其他處理,因為這樣沒有任何意義,資源是處于被占用的情況。

先看下面檢測的代碼:

#!/usr/bin/env python# _*_ coding: UTF-8 _*_# MedusaSorcerer Scriptimport osclass OpenFile: def __init__(self):self.file = None def open(self, path):self.file = open(path, ’w’)if __name__ == ’__main__’: file_path = ’medusa.md’ file = OpenFile() file.open(file_path) os.remove(file_path)

代碼中我們把文件對象,進行了實例屬性的方式引用,在此之后,我們使用 os 模塊進行刪除被寫入的文件。執行改代碼片段后,會出現以下內容:

Traceback (most recent call last): File 'medusa/main.py', line 19, in <module> os.remove(file_path)PermissionError: [WinError 32] 另一個程序正在使用此文件,進程無法訪問。: ’medusa.md’

Process finished with exit code 1

那是因為被刪除的文件沒有得到資源釋放。我們在上面的基礎上進行套用函數的方式:

#!/usr/bin/env python# _*_ coding: UTF-8 _*_# MedusaSorcerer Scriptimport osclass OpenFile: def __init__(self):self.file = None def open(self, path):self.file = open(path, ’w’)def open_file(path): file = OpenFile() file.open(path)if __name__ == ’__main__’: file_path = ’medusa.md’ open_file(file_path) os.remove(file_path)

這段代碼會成功的被執行成功,原因是當你執行函數的時候,函數內的臨時變量將被回收釋放,因此 OpenFile 的實例對象被釋放了,實例屬性也就不存在而被釋放,所以會執行成功。

那是否我們的操作都應該使用函數包裹的方式執行呢?with 的出現,完美解決了這個問題:

#!/usr/bin/env python# _*_ coding: UTF-8 _*_# MedusaSorcerer Scriptimport osif __name__ == ’__main__’: file_path = ’medusa.md’ with open(file_path, ’w’) as f:print(f) os.remove(file_path)

在 with 語法中,將后面打開文件的操作,返回的文件對象,賦值給 f 變量,在結構體中輸出了 f 變量的內容,并且在結構體外刪除了該文件:

medusapython.exe medusa/main.py<_io.TextIOWrapper name=’medusa.md’ mode=’w’ encoding=’cp936’>

Process finished with exit code 0

在沒有使用 close() 的情況下,依舊可以對文件進行刪除,這就是上下文管理的美妙。

實現

上下文管理,實際上是實現了 __enter__ 和 __exit__ 方法:

#!/usr/bin/env python# _*_ coding: UTF-8 _*_# MedusaSorcerer Scriptclass Medusa: def __init__(self):print(’__init__’) def __enter__(self):print(’__enter__’) def __exit__(self, exc_type, exc_val, exc_tb):print(’__exit__’)if __name__ == ’__main__’: medusa = Medusa() with medusa:print(’with object’) print(’finish’)

以下是輸出結果:

__init____enter__with object__exit__finish

我們發現魔法方法在結合某些語法后會發生自動調度,所以,上下文管理中就在自動調度中,關閉了某些對象。

優點

實現上下文管理可以簡化我們的代碼,讓代碼更加簡單易讀,使用最少的代碼量,就可以完成全部工作。

到此這篇關于Python上下文管理器Content Manager的文章就介紹到這了,更多相關Python上下文管理器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) | 耐酸泵,耐酸泵厂家-淄博华舜耐腐蚀真空泵 | 德州万泰装饰 - 万泰装饰装修设计软装家居馆| 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 | 反渗透水处理设备|工业零排放|水厂设备|软化水设备|海南净水设备--海南水处理设备厂家 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 金属回收_废铜废铁回收_边角料回收_废不锈钢回收_废旧电缆线回收-广东益夫金属回收公司 | 逗网红-抖音网红-快手网红-各大平台网红物品导航 | 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 铣床|万能铣床|立式铣床|数控铣床|山东滕州万友机床有限公司 | 上海璟文空运首页_一级航空货运代理公司_机场快递当日达 | 涡轮流量计_LWGY智能气体液体电池供电计量表-金湖凯铭仪表有限公司 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 壹作文_中小学生优秀满分作文大全 | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | 广州展览设计公司_展台设计搭建_展位设计装修公司-众派展览装饰 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 贴片电感_贴片功率电感_贴片绕线电感_深圳市百斯特电子有限公司 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 防腐木批发价格_深圳_惠州_东莞防腐木厂家_森源(深圳)防腐木有限公司 | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 字典-新华字典-在线字典查字-字典趣 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 在线悬浮物浓度计-多参数水质在线检测仪-上海沃懋仪表科技有限公司 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 |