zoukankan      html  css  js  c++  java
  • @contextmanager 另外一种实现上下文的方法(含yield 生成器)

    class AAA:

      def __enter__(self):    上文函数

        return slef

      def __exit__(self, exc_type , exc_value , tb):   下文函数

        print  "下文函数,执行关闭连接释放资源"

      def test(self):

        print "执行查询"

    with AAA as f:   

      f.test()

    原上下文使用见   https://www.cnblogs.com/kaibindirver/p/12688998.html

    类和函数(没有设置上下文函数的)

    class MyResoure:

      def query(self):

        print("query data")

    新方法实现让调用MyResoure类中query函数实现有上下文的方法:

    from contextlib import contextmanager

    @contextmanager

    def make_myresource():

      print("connect to resource")

      yield MyResource()           #这里原来是return 但是函数中遇到return就结束了,不会再返回函数,所以要使用yield (生成器),当他走到这步,再去执行with区域的函数,然后再继续回来这个函数中执行下面一句    #原来 函数中 return 和 yield 后面其实不用返回东西也可以

      print("close resource connection")

    with make_myresource() as r:

      r.query()

    输出:

    "connect to resource"

    "query data"

    "close resource connection"

     

    yield不返回的例子

    例子: https://www.cnblogs.com/kaibindirver/p/13029791.html 

  • 相关阅读:
    1、Python的初识与简介
    解密解密
    python看是32位还是64
    linux实战一段,安装python3(centos)
    前段技巧
    django后端safe和前端safe的方法
    测试
    python小知识整理
    ajax格式
    111
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/12977705.html
Copyright © 2011-2022 走看看