zoukankan      html  css  js  c++  java
  • python with语句

    with是python2.5以后才有的,它实质是一个控制流语句,with可以用来简化try-finally语句。它的主要用法是实现一个类__enter__()和__exit__()方法。

    class controlled_execution:
        def _enter__(self):
            set things up
            return thing
        def __exit__(self, type, value,  traceback):
            tear thing down
    with controlled_execution() as thing:
        some code

      在实际的运行过程中,python会首先运行enter里的代码,返回thing,作为as 后面的变量值,然后再运行with模块中的代码,最后会自动执行exit中的代码,
    而不管with中的代码运行结果如何。这也就是with能简化try-finally语句的原因。所以with通常用在读取文件的操作中,将文件句柄的关闭操作放在exit方法中,
    这样就不会因忘记释放文件句柄而产生可


    只要支持环境管理协议(Context Management Protocol),就可以使用with as语句。支持环境管理的类,必须实现__enter__()与__exit__()两个方法,这样的类成为环境管理员(Context Manager)
    例如:
    class FileReader:
        def __init__(self, filename):
            self.filename = filename
        
        def __enter__(self):
            self.file = open(self.filename, 'r', encoding='UTF-8')
            return self.file
        
        def __exit__(self, type, msg, traceback):
            if type:
                print(msg)       # 作你的额外处理
            self.file.close()
            return False


     在实际的运行过程中,python会首先运行enter里的代码,返回thing,作为as 后面的变量值,然后再运行with模块中的代码,最后会自动执行exit中的代码,而不管with中的代码运行结果如何。这也就是with能简化try-finally语句的原因。所以with通常用在读取文件的操作中,将文件句柄的关闭操作放在exit方法中,这样就不会因忘记释放文件句柄而产生可能出现的错误。

  • 相关阅读:
    haproxy frontend 和backend
    haproxy 页面重定向(域名跳转)
    LWP::Simple 模块
    Perl LWP模块
    错误代码: 1582 Incorrect parameter count in the call to native function 'str_to_date'
    perl 面向对象 -> 符号使用
    跨域访问设置
    mysql 主从复制用户权限限制
    错误代码: 1045 Access denied for user 'skyusers'@'%' (using password: YES)
    sync_relay_log
  • 原文地址:https://www.cnblogs.com/seablog/p/7133388.html
Copyright © 2011-2022 走看看