• 零基础学习python_with(34课)


      今天学习的with语句,with的表达形式如下:据说context必须是上下文管理器,这我就懵比了,啥玩意啊。。。 

    with语句的表达形式:

    with context as var:

       block

    context 可以是任意表达式; as VAR 是可选的。其一般的执行过程是这样的:

    1、计算 context ,并获取一个上下文管理器。

    2、上下文管理器的 __exit()__ 方法被保存起来用于之后的调用。

    3、调用上下文管理器的 __enter()__ 方法。

    4、如果 with 表达式包含 as VAR ,那么 context 的返回值被赋值给 VAR 。

    5、执行 BLOCK 中的表达式。

    6、调用上下文管理器的 __exit()__ 方法。如果 BLOCK 的执行过程中发生了一个异常导致程序退出,那么异常的 type 、 value 和 traceback (即 sys.exc_info()的返回值 )将作为参数传递给 __exit()__ 方法。否则,将传递三个 None 。

    刚开始看上面的我也不是很懂,后面查看了下资料发现with的用法跟“上下文管理”是一起的,然后会调用 __enter()__ 和__exit()__ 方法,简单的来讲呢,举个下面的例子吧,反正要用专业术语说呢我也不知道,请看大众化的一个实例:
      这个是我们之前读写文件的用到的try...except..finally表达形式
    try:
        filename = 'test.txt'
        f = open(filename,'w') 
        f.write('Hello world ') 
    finally: f.close()

       但是这个也有可能最终finally执行出错导致没有执行到文件关闭,而且代码也不够简洁,所以就出来了个with...as的表达,如下:

    with open('test.txt') as f:
        f.write('Hello world')

    就这么简单就表达完了,with的表达里面会自动在异常抛出前将文件关闭。

    如果要打开多个项目的话只需要逗号隔开即可,如下面表达:

    with A() as a, B() as b:
            print()

    with暂时讲解这么多,当然还有更深层次的内容以后用到的话再学吧,嘻嘻!

     
  • 相关阅读:
    MySql 数据备份与还原
    PHP 连接数据库
    迭代法写线性回归
    ML numpy、pandas、matplotlib的使用
    005 动态加载实例
    爬虫实现案例
    004 使用scrapy框架爬虫
    003 爬虫持久化的三个不同数据库的python代码
    内置函数和匿名函数
    迭代器和生成器
  • 原文地址:https://www.cnblogs.com/leixiaobai/p/7786757.html
Copyright © 2020-2023  润新知