当前位置: 首页 > news >正文

网站建设与管理复习知识点长春做网站网站

网站建设与管理复习知识点,长春做网站网站,网站开发需要怎么做,嘉兰图设计有限公司深入理解python with 语句 python中with 语句作为try/finally 编码范式的一种替代, 适用于对资源进行访问的场合#xff0c;确保不管使用过程中是否发生异常都会执行必要的”清理”操作#xff0c;释放资源#xff0c;比如文件使用后自动关闭、线程中锁的自动获取和释放等 1…深入理解python with 语句 python中with 语句作为try/finally 编码范式的一种替代, 适用于对资源进行访问的场合确保不管使用过程中是否发生异常都会执行必要的”清理”操作释放资源比如文件使用后自动关闭、线程中锁的自动获取和释放等 1. 使用with打开文件 你应该见过下面这种打开文件的方式 with open(data, r, encodingutf-8) as f: data f.readlines() 上面的写法与下面的写法在最终效果上是一致的 f open(data, r, encodingutf-8) try: data f.readlines() except: pass finally: f.close() 对比两段代码不难发现使用with语句时代码更加简洁而且不用主动关闭文件在with语句体退出时会自动关闭文件即便with语句体中发生了异常。 2. 上下文管理器和with 语句有关的概念 想要理解with语句就必须先理解以下几个概念 2.1 上下文管理协议 简单来说就是实现两个方法__enter__() 和__exit__() 2.2 上下文管理器 实现了__enter__() 和__exit__()的对象就是上下文管理器 2.3 运行时上下文 由上下文管理器创建在with语句体代码执行前通过__enter__()进入语句体代码执行结束后通过__exit__()退出 2.4 上下文表达式 在with关键字后面的表达式表达式返回上下文管理器对象 2.5 语句体 with语句包裹起来的代码 3. 使用with语句控制线程锁的释放 使用with不仅能够自动的关闭打开的文件对象还可以自动的释放线程锁这样可以避免死锁的发生在python多线程---线程锁一文中为避免多个线程同时对一个变量对象进行修改在关键语句上加了线程锁 def worker(): time.sleep(1) global a for i in range(100000): m_lock.acquire() # 加锁 a 1 m_lock.release() # 释放锁 如果你忘记了写m_lock.release() 对锁进行释放那么这将导致其他线程永远也无法获取到线程锁这样就形成了死锁上面的代码在acquire之后使用release释放所使用with语句可以更加优雅的实现加锁和释放锁的操作。 def worker(): time.sleep(1) global a for i in range(100000): with m_lock: a 1 4. 同时打开多个文件 许多人都不知道with语句可以同时打开多个文件这样做可以减少代码的缩进让代码的编写更加容易两个open语句之间用逗号分隔即可。 with open(a1, w)as f1, open(a2, w)as f2: f1.write(a) f2.write(b) 5. 自定义上下文管理器 在调试程序性能时如果只是想知道某个函数的执行时长可以使用一个可以统计函数运行时长的装饰器进行处理但程序往往很复杂一段代码里要做很多操作不只是调用了一个函数也可能存在循环因此单纯的知道某个函数的执行时长不能帮助我们更好的了解程序的性能。 我们需要针对某个代码段进行时间统计知道这一段代码的执行时长对我们很有帮助。你可以使用time.time()方法在代码段开始时获取到时间在结束时再次获取到时间两个时间做差就可以得到这个代码段的运行时长这种操作方式写起来很麻烦如果有多处代码段需要统计就得写多次很不方便。 下面是一个可以统计代码段运行时长的上下文管理器 import time class ProTime(object): def __init__(self, tag): self.tag tag def __enter__(self): self.start_time time.time() def __exit__(self, exc_type, exc_val, exc_tb): self.end_time time.time() time_diff self.end_time - self.start_time msg 代码段{tag}运行时长{time_diff}.format(tagself.tag, time_difftime_diff) print(msg) with ProTime(first) as pt: # 这里是你要统计运行时长的代码块 time.sleep(1) with ProTime(second) as pt: # 这里是你要统计运行时长的代码块 time.sleep(2) 理解这段代码的关键之处在with语句所包裹的语句体执行之前先要执行__enter__方法语句体执行结束之后不论是否有异常都要执行__exit__在__exit__方法里三个参数提供了异常的全部信息如果你想处理异常可以在这个方法里做处理。 __init__ 方法有一个tag参数设置这个参数的目的是为了在输出信息里区分多个代码块如果不想设置这个tag可以考虑对这个上下文管理器进行修改通过调用栈获得调用信息准确的指出是哪个代码段的执行时长。 修改后的上下文管理器如下 import time import sys class ProTime(object): def __init__(self, tag): frame sys._getframe() tag_frame frame.f_back self.lineno tag_frame.f_lineno self.filename tag_frame.f_code.co_filename self.tag tag def __enter__(self): self.start_time time.time() def __exit__(self, exc_type, exc_val, exc_tb): self.end_time time.time() time_diff self.end_time - self.start_time if self.tag: msg 代码段{tag}运行时长{time_diff}.format(tagself.tag, time_difftime_diff) else: msg 文件{filename} 第 {lineno} 行代码块执行时长{time_diff}.format(filenameself.filename, linenoself.lineno, time_difftime_diff) print(msg) with ProTime(first) as pt: # 这里是你要统计运行时长的代码块 time.sleep(1) with ProTime() as pt: # 这里是你要统计运行时长的代码块 time.sleep(2) def test(): with ProTime() as pt: # 这里是你要统计运行时长的代码块 time.sleep(1) test()
http://www.zqtcl.cn/news/695/

相关文章:

  • 网站建设代理多少钱网站制作软件dw的全称
  • 吉林省建设项目招标网站网站建设产品话术
  • 江苏建设工程交易中心网站wordpress教程php二次开发
  • 做亚马逊联盟一定要有网站吗在线定制英文名
  • 最好的php网站开发工具网站你懂我意思正能量app
  • 全国网站建设企业windows优化大师官方
  • 基于5G的网站设计asp.net 做网站文章是怎么存储的
  • 鞋网站建设方案易无忧建站
  • 广东省网站开发建设成都宅天下装饰公司口碑
  • 局域网站点建设方案公司做网站流程
  • 网站的模板怎么做建设博物馆网站
  • 网站开发完成后如何发布响应式网页设计ppt
  • 做网站公司不给源代码青岛一点两区救治医院
  • app软件设计公司太原网站推广优化
  • 本机做网站服务上传到泰州网站模板
  • 做网站一定要自己搭建服务器吗学做网网站论坛
  • 东莞p2p网站开发价钱wordpress安装多个
  • 网站建设项目验收付款注册个人公司流程和费用最新
  • 南通优化网站排名新媒体运营培训学校
  • 齐齐哈尔市建设局网站做ui的网站有哪些内容
  • 深圳建网站哪个好贵阳app制作开发
  • 帮建网站wordpress太臃肿
  • 房产网站推广龙华网站建设推广外包
  • 招聘网站可以同时做两份简历吗6蜀icp备 网站建设中企动力成都
  • 做图软件ps下载网站肇庆网站推广排名
  • 查询域名是否做过网站南宁网站建设q.479185700強
  • 菏泽网站建设便宜臻动传媒桂林生活网招聘信息网
  • 做网站的公司不给域名安徽合肥建设网
  • 做木箱的网站推广计划名称写什么
  • 网站建站定做天津和平做网站贵吗