上下文管理器和else块

其实是不想写这篇分享的,感觉第十五章没有讲多少东西,而且之前分享过关于上下文的东西(这里),所以就少写一点新的东西吧。

else

  • for: 仅当for循环运行完毕时(即for循环没有被break语句终止)才运行else
  • while:仅当while循环条件因为假值而退出时(即while循环没有被break语句终止)才运行else
  • try:仅当try块中没有异常抛出时才运行else

两种风格

  • EAFP: 取得原谅比获得许可容易
  • LBYL: 三思而后行

使用@contextmanager

使用@contextmanager来代替上下文管理器,与上下文管理器的区别是异常默认被处理,而不是继续向上层抛出。

@contextlib.contextmanager
def looking_glass():
    import sys
    original_write = sys.stdout.write

    def reverse_write(text):
        original_write(text[::-1])

    sys.stdout.write = reverse_write
    yield 'JABBERWOCKY'
    sys.stdout = original_write

取出面包

假如有一系列操作,如A-B-C和P-B-Q,那么可以把B拿出来,变成子程序,这就好比把三明治的馅取出来,这样我们就能使用金枪鱼搭配不同的面包。如果我们想把面包取出来,使用小麦面包夹不同的馅,这就是with语句实现的功能。

本文标题:上下文管理器和else块

文章作者:Darren

发布时间:2018年11月02日 - 09:11

最后更新:2018年11月02日 - 13:11

原始链接:http://Darren2017.github.io/2018/11/02/上下文管理器和else块/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。