zoukankan      html  css  js  c++  java
  • python中的上下文管理器

    刚刚看了vamei大神的上下文管理器博客,理解如下:

    其实我自己经常用到上下文管理器,尤其是在打开文件的时候,如果自己比较懒,不想手工打上f.close(),使用上下文管理器就ok拉。

    上下文管理器就是with ** as:

    例如打开文件时,

    >>> with open('test.txt', 'r') as fi:
    ... 
    

     上下文管理器在执行时会调用fi的__enter__方法,执行完毕时又会调用fi的__exit__方法,这样就完成了文件对象的创建和关闭。

    我们来看下fi的magic函数有哪些:

    fi = open('1', 'w')
    >>> dir(fi)
    ['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']
    

     显然,测试下__enter__和__exit__方法:

    >>> fi = open('test.txt', 'r')
    >>> fi.__enter__()
    <open file 'test.txt', mode 'r' at 0x107225780>
    >>> fi.__exit__()
    >>> fi.closed
    True
    

     很明显,__enter__函数打开了文件,而__exit__函数关闭了文件。

    通过这个原理,我们可以自己写一些带有__enter__和__exit__函数的对象,这样就可以对这些对象使用上下文管理啦。

    上下文管理原理:

    #with ** as:
    
    object.__enter__()
    try:
        block
    #可能抛出异常
    finally:
        object.__exit__()
    
  • 相关阅读:
    工程师死绝的世界答案-python3版
    PEP 530 -- 异步推导式
    pandas爬虫
    mac下安装memcache
    mac下安装redis
    mac安装adb
    风热感冒,风寒感冒,病毒性感冒,细菌性感冒
    网络异常时抓包操作说明tcpdump+Wireshark
    你家酱油“氨基酸态氮”是多少?酱油的选择
    买安卓手机的一点心得
  • 原文地址:https://www.cnblogs.com/chybot/p/4677361.html
Copyright © 2011-2022 走看看