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

延安城乡建设规划局网站做网站的时候怎么把图片往左移

延安城乡建设规划局网站,做网站的时候怎么把图片往左移,百度学术官网首页,wordpress 引入样式在 Python 2.5 中#xff0c;with关键字被加入。它将常用的 try ... except ... finally ...模式很方便的被复用。看一个最经典的例子#xff1a; with open(file.txt) as f: content f.read() 在这段代码中#xff0c;无论with中的代码块在执行的过程中发生任何情况#…在 Python 2.5 中with关键字被加入。它将常用的 try ... except ... finally ...模式很方便的被复用。看一个最经典的例子 with open(file.txt) as f: content f.read() 在这段代码中无论with中的代码块在执行的过程中发生任何情况文件最终都会被关闭。如果代码块在执行的过程中发生了一个异常那么在这个异常被抛出前程序会先将被打开的文件关闭。 再看另外一个例子。 在发起一个数据库事务请求的时候经常会用类似这样的代码 db.begin() try: # do some actions except: db.rollback() raise finally: db.commit() 如果将发起事务请求的操作变成可以支持with关键字的那么用像这样的代码就可以了 with transaction(db): # do some actions 下面详细的说明一下with的执行过程并用两种常用的方式实现上面的代码。 with 的一般执行过程 一段基本的with表达式其结构是这样的 with EXPR as VAR: BLOCK 其中EXPR可以是任意表达式as VAR是可选的。其一般的执行过程是这样的 计算EXPR并获取一个上下文管理器。 上下文管理器的__exit()__方法被保存起来用于之后的调用。 调用上下文管理器的__enter()__方法。 如果with表达式包含as VAR那么EXPR的返回值被赋值给VAR。 执行BLOCK中的表达式。 调用上下文管理器的__exit()__方法。如果BLOCK的执行过程中发生了一个异常导致程序退出那么异常的type、value和traceback(即sys.exc_info()的返回值)将作为参数传递给__exit()__方法。否则将传递三个None。 将这个过程用代码表示是这样的 mgr (EXPR) exit type(mgr).__exit__ # 这里没有执行 value type(mgr).__enter__(mgr) exc True try: try: VAR value # 如果有 as VAR BLOCK except: exc False if not exit(mgr, *sys.exc_info()): raise finally: if exc: exit(mgr, None, None, None) 这个过程有几个细节 如果上下文管理器中没有__enter()__或者__exit()__中的任意一个方法那么解释器会抛出一个AttributeError。 在BLOCK中发生异常后如果__exit()__方法返回一个可被看成是True的值那么这个异常就不会被抛出后面的代码会继续执行。 接下来用两种方法来实现上面来实现上面的过程的吧。 实现上下文管理器类 第一种方法是实现一个类其含有一个实例属性db和上下文管理器所需要的方法__enter()__和__exit()__。 class transaction(object): def __init__(self, db): self.db db def __enter__(self): self.db.begin() def __exit__(self, type, value, traceback): if type is None: db.commit() else: db.rollback() 了解with的执行过程后这个实现方式是很容易理解的。下面介绍的实现方式其原理理解起来要复杂很多。 使用生成器装饰器 在Python的标准库中有一个装饰器可以通过生成器获取上下文管理器。使用生成器装饰器的实现过程如下 from contextlib import contextmanager contextmanager def transaction(db): db.begin() try: yield db except: db.rollback() raise else: db.commit() 第一眼上看去这种实现方式更为简单但是其机制更为复杂。看一下其执行过程吧 Python解释器识别到yield关键字后def会创建一个生成器函数替代常规的函数在类定义之外我喜欢用函数代替方法。 装饰器contextmanager被调用并返回一个帮助方法这个帮助函数在被调用后会生成一个GeneratorContextManager实例。最终with表达式中的EXPR调用的是由contentmanager装饰器返回的帮助函数。 with表达式调用transaction(db)实际上是调用帮助函数。帮助函数调用生成器函数生成器函数创建一个生成器。 帮助函数将这个生成器传递给GeneratorContextManager并创建一个GeneratorContextManager的实例对象作为上下文管理器。 with表达式调用实例对象的上下文管理器的__enter()__方法。 __enter()__方法中会调用这个生成器的next()方法。这时候生成器方法会执行到yield db处停止并将db作为next()的返回值。如果有as VAR那么它将会被赋值给VAR。 with中的BLOCK被执行。 BLOCK执行结束后调用上下文管理器的__exit()__方法。__exit()__方法会再次调用生成器的next()方法。如果发生StopIteration异常则pass。 如果没有发生异常生成器方法将会执行db.commit()否则会执行db.rollback()。 再次看看上述过程的代码大致实现 def contextmanager(func): def helper(*args, **kwargs): return GeneratorContextManager(func(*args, **kwargs)) return helper class GeneratorContextManager(object): def __init__(self, gen): self.gen gen def __enter__(self): try: return self.gen.next() except StopIteration: raise RuntimeError(generator didnt yield) def __exit__(self, type, value, traceback): if type is None: try: self.gen.next() except StopIteration: pass else: raise RuntimeError(generator didnt stop) else: try: self.gen.throw(type, value, traceback) raise RuntimeError(generator didnt stop after throw()) except StopIteration: return True except: if sys.exc_info()[1] is not value: raise 总结 Python的with表达式包含了很多Python特性。花点时间吃透with是一件非常值得的事情。 一些其他的例子 锁 contextmanager def locked(lock): lock.acquired() try: yield finally: lock.release() 标准输出重定向 contextmanager def stdout_redirect(new_stdout): old_stdout sys.stdout sys.stdout new_stdout try: yield finally: sys.stdout old_stdout with open(file.txt, w) as f: with stdout_redirect(f): print hello world 引用
http://www.yutouwan.com/news/468538/

相关文章:

  • 张掖网站建设公司盐城市建设银行网站
  • 镇江大港南站市场推广方式有哪几种
  • 网站源模板开淘宝店怎么做充值网站
  • 中国铁道建设协会网站霍山网站建设
  • 制作视频软件哪个好如何优化关键词提升相关度
  • 公司建网站怎么弄网站空格键代码
  • 群晖做自己的电影网站flash网站建设教程视频
  • 网站设计师发展方向万网注册的网站长时间不能访问是不是被封了
  • 自己想做网站怎么做广州市人口
  • 创新的龙岗网站建设php网站开发技术代码
  • 海南三亚做网站阳江房产网站
  • 苏州老字号企业官方的网站策划书微信公众号与网站绑定
  • 个人网站流程正规微商平台
  • 网站是如何建设的wordpress 截断插件
  • 网站审核备案 几天玄天教学网站建设
  • 网站开发 文学在中国如何申请域名
  • 临沂h5建站怎么注册域名网站
  • php网站伪静态wordpress无插件自动实现tag关键字内链
  • 电脑记事本做网站wordpress不同分类文章不同模板
  • 医疗器械网站素材如何做直播类网站
  • 打赏网站怎么建设绍兴建设局网站
  • 专业提供网站建设服务包括哪些评论 wordpress
  • 顾问式 网站网站开发代理
  • 单位网站建设情况我为群众办实事活动总结
  • 阿里云建网站流程河北省网站备案系统
  • 网站设计三把火信息流推广的竞价机制是
  • 简单的公司网站做百度网站排名软件
  • 北京电力交易中心优化软件排行榜
  • 相亲网站怎么做宿州房产信息网二手房
  • 深圳北站设计者规范贷款网络营销活动