精华内容
下载资源
问答
  • 主要介绍了python with上下文管理器的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
  • why with? 先看这样子的程序 myfile = open(r'C:\misc\data') try: for line in myfile: print(line) #...more code... finally: myfile.close() 程序尝试打印myfile的每行数据,最后关闭myfile文件 当然我们...
  • 主要介绍了Python with语句上下文管理器两种实现方法,结合实例形式较为详细的分析了Python上下文管理器的相关概念、功能、使用方法及相关操作注意事项,需要的朋友可以参考下
  • 我们可以通过with语句结合上下文管理器简化一些操作。 使用with语句结合自定义上下文管理器完成数据库相应的操作,代码实现如下: # 1. 导入模块 import pymysql # 创建自定义上下文管理器对象 class MyDatabase...
  • with上下文管理器 with with 一种上下文管理器 def m3(): with open("output.txt","r") as f: f.write("python") 上下文管理器 任何实现了__enter__() 和__exit__()的对象都是上下文管理器 上文:正常进行的...

    with、上下文管理器

    with

    with 一种上下文管理器

    def m3():
        with open("output.txt","r") as f:
            f.write("python")
    

    上下文管理器

    • 任何实现了__enter__() 和__exit__()的对象都是上下文管理器
    • 上文:正常进行的代码;下文:出现异常或结束/关闭的代码
    • 上下文管理器可以用with关键字来保证文件可以关闭,是try/finally的替代方式

    方法一:__enter__() 和__exit__()
    上下文管理流程图:
    在这里插入图片描述

    方法二:contextlib模块:

    from contextlib import contextmanager
    
    @contextmanager
    def my_open(path, mode):
        f = open(path, mode)
        yield f
        f.close()
        
    with my_open('out.txt', 'w') as f:
        f.write("hello , the simplest context manager")
    

    注:

    • with开始执行
    • yield处暂停执行,上文与下文之间暂停执行
    展开全文
  • with与“上下文管理器上下文管理器 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器 上下文管理器对象可以使用 with 关键字。显然,文件(file)对象也实现了上下文管理器。 ...

    with与“上下文管理器”

    上下文管理器

    • 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器
    • 上下文管理器对象可以使用 with 关键字。显然,文件(file)对象也实现了上下文管理器。
    class File():
    
        def __init__(self, filename, mode):
            self.filename = filename
            self.mode = mode
    
        def __enter__(self):
            print("entering")
            self.f = open(self.filename, self.mode)
            return self.f
    
        def __exit__(self, *args):
            print("will exit")
            self.f.close()
    
    
    with File('out.txt', 'w') as f:
        print("writing")
        f.write('hello, python')

    实现上下文管理器的另外方式

    • Python 还提供了一个 contextmanager 的装饰器,更进一步简化了上下文管理器的实现方式。
    • 通过 yield 将函数分割成两部分,yield 之前的语句在 enter 方法中执行,yield 之后的语句在 exit 方法中执行。紧跟在 yield 后面的值是函数的返回值。
    from contextlib import contextmanager
    
    @contextmanager
    def my_open(path, mode):
        f = open(path, mode)
        yield f
        f.close()

    调用

    with my_open('out.txt', 'w') as f:
        f.write("hello , the simplest context manager")
    展开全文
  • Python2.5之后引入了上下文管理器(context manager),算是Python的黑魔法之一,它用于规定某个对象的使用范围。本文是针对于该功能的思考总结。 为什么需要上下文管理器? 首先,需要思索下为什么需要引入上下文...
  • with上下文管理器

    万次阅读 2019-04-21 17:18:15
    上下文管理器 任何实现了 enter() 和 exit() ⽅法的对象都可称之为上下⽂管理 器,上下⽂管理器对象可以使⽤ with 关键字。显然,⽂件(file)对象也实现 了上下⽂管理器 方法一 class File(): def __init__(self, ...

    上下文管理器

    任何实现了 enter() 和 exit() ⽅法的对象都可称之为上下⽂管理
    器,上下⽂管理器对象可以使⽤ with 关键字。显然,⽂件(file)对象也实现
    了上下⽂管理器

    方法一
    class File():
    	def __init__(self, filename, mode):
    		self.filename = filename
    		self.mode = mode
    	def __enter__(self):
    		print("entering")
    		self.f = open(self.filename, self.mode)
    		return self.f
    	def __exit__(self, *args):
    		print("will exit")
    		self.f.close()
    

    enter() ⽅法返回资源对象,这⾥就是你将要打开的那个⽂件对象,
    exit() ⽅法处理⼀些清除⼯作。
    因为 File 类实现了上下⽂管理器,现在就可以使⽤ with 语句了。

    with File('out.txt', 'w') as f:
    	print("writing")
    	f.write('hello, python')
    

    这样,你就⽆需显示地调⽤ close ⽅法了,由系统⾃动去调⽤,哪怕中间遇
    到异常 close ⽅法也会被调⽤。

    方法二

    定义

    from contextlib import contextmanager
    @contextmanager
    def my_open(path, mode):
    	f = open(path, mode)
    	yield f
    	f.close()
    

    调⽤

    with my_open('out.txt', 'w') as f:
    	f.write("hello , the simplest context manager")
    
    展开全文
  • 本文实例讲述了Python with关键字,上下文管理器,@contextmanager文件操作。分享给大家供大家参考,具体如下: demo.py(with 打开文件): # open 方法的返回值赋值给变量 f,当离开 with 代码块的时候,系统会...
  • 【Python】with上下文管理器的原理和应用

    千次阅读 多人点赞 2018-09-16 21:48:51
    这篇博客主要总结with用法,自定义上下文管理器,以及__exit__的参数相关内容。 with 语句是 Pyhton 提供的一种简化语法,适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作...

    这篇博客主要总结with用法,自定义上下文管理器,以及__exit__的参数相关内容。

    with 语句是 Pyhton 提供的一种简化语法,适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,with 语句主要是为了简化代码操作。

    with:文件使用后自动关闭

    # 创建一个文件test.txt,若存在则打开,写入Hello Python
    # 创建/打开文件
    f = open('test.txt', 'w')
    f.write("Hello Python")
    # 关闭这个文件
    f.close()
    
    
    # 使用with
    with open('test.txt', 'w') as f:
        f.write('Python')

    可以发现:通过 with 语句在编写代码时,会使代码变得更加简洁,不用再去关闭文件。

    with的执行过程:

    在执行 with 语句时,首先执行 with 后面的 open 代码

    执行完代码后,会将代码的结果通过 as 保存到 f 中

    然后在下面实现真正要执行的操作

    在操作后面,并不需要写文件的关闭操作,文件会在使用完后自动关闭

     

    with的执行原理

    实际上,在文件操作时,并不是不需要写文件的关闭,而是文件的关闭操作在 with 的上下文管理器中的协议方法里已经写好了。当文件操作执行完成后, with语句会自动调用上下文管理器里的关闭语句来关闭文件资源。

    上下文管理器

    ContextManager ,上下文是 context 直译的叫法,在程序中用来表示代码执行过程中所处的前后环境。上下文管理器中有 __enter__ 和 __exit__ 两个方法,以with为例子,__enter__ 方法会在执行 with 后面的语句时执行,一般用来处理操作前的内容。比如一些创建对象,初始化等;__exit__ 方法会在 with 内的代码执行完毕后执行,一般用来处理一些善后收尾工作,比如文件的关闭,数据库的关闭等。

    自定义一个上下文管理器,模拟with文件操作
    class MyOpen(object):
        def __init__(self,path,mode):
            # 记录要操作的文件路径和模式
            self.__path = path
            self.__mode = mode
    
        def __enter__(self):
            print('代码执行到了__enter__......')
            # 打开文件
            self.__handle = open(self.__path,self.__mode)
            # 返回打开的文件对象引用, 用来给  as 后的变量f赋值
            return self.__handle
    
        # 退出方法中,用来实现善后处理工作
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('代码执行到了__exit__......')      
            self.__handle.close()
    
    # a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    with MyOpen('test.txt','a+') as f:
        # 创建写入文件
        f.write("Hello Python!!!")
        print("文件写入成功")

    执行结果:

    通过执行顺序,可以看到文件写入操作执行完之后,自动调用了__exit__方法,做了善后处理工作。

     

    __exit__方法的参数

    __exit__ 方法中有三个参数,用来接收处理异常,如果代码在运行时发生异常,异常会被保存到这里。 

    exc_type : 异常类型

    exc_val : 异常值

    exc_tb : 异常回溯追踪

    # 编写两个数做除法的程序,然后给除数穿入0
    class MyCount(object):
        # 接收两个参数
        def __init__(self,x, y):
            self.__x = x
            self.__y = y
        # 返回一个地址(实质是被as后的变量接收),实例对象就会执行MyCount中的方法:div()
        def __enter__(self):
            print('代码执行到了__enter__......')
            return self
        def __exit__(self, exc_type, exc_val, exc_tb):
            print("代码执行到了__exit__......")
            if exc_type == None:
                print('程序没问题')
            else:
                print('程序有问题,如果你能你看懂,问题如下:')
                print('Type: ', exc_type)
                print('Value:', exc_val)
                print('TreacBack:', exc_tb)
    
            # 返回值决定了捕获的异常是否继续向外抛出
            # 如果是 False 那么就会继续向外抛出,程序会看到系统提示的异常信息
            # 如果是 True 不会向外抛出,程序看不到系统提示信息,只能看到else中的输出
            return  True
    
        def div(self):
            print("代码执行到了除法div")
            return self.__x / self.__y
    
    
    with MyCount(1, 0) as mc:
        mc.div()

    执行结果:

    可以看到,系统没有抛出异常,而是__exit__捕获到了异常,并按照我们的方式进行了抛出。

    展开全文
  • 实现了上下文管理协议的对象都可以被with作用.下面是最简单的一个关于with的使用def fun(): with open("output.txt", "w") as f: f.write("Python之禅")open 方法的返回值赋值给...
  • 上下文管理器with块,具体内容如下 上下文管理器对象存在的目的是管理 with 语句,就像迭代器的存在是为了管理 for 语句一样。 with 语句的目的是简化 try/finally 模式。这种模式用于保证一段代码运行完毕后执行...
  • 在Python中作为上下文管理器的对象可以使用with语句,提供上下文管理器的contextlib模块的使用则是Python编程中的高级技巧,下面我们就来详细整理一下Python中的with语句与上下文管理器学习总结:
  • Python with上下文管理及自定义上下文管理 一、上下文管理器 上下文管理器是对Context Manager的翻译 ,上下文是 context 直译的叫法,在程序中用来表示代码执行过程中所处的前后环境. 在文件操作时,需要打开,...
  • 本文介绍了Python中的上下文管理器,以及如何结合with语句来使用上下文管理器,并且总结了一下with 语句的执行流程。在很多情况下,with语句可以简化代码,并增加代码的健壮性。
  • 主要介绍了关于python中关键字"with"和上下文管理器的相关资料,文中介绍的非常详细,相信对大家学习或者使用python具有一定的参考价值,需要的朋友们下面来一起看看吧。
  • Python中的with语法与上下文管理器

    千次阅读 2017-10-04 17:22:45
    with的作用with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 资源对象的获取与释放. 使用with可以简化try... finally ... 在修改函数代码的前提下设置函数的默认参数 简化try... finally ....
  • 本篇文章主要介绍了Python中的上下文管理器with语句的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 文章目录为什么需要上下文管理器?举两个例子:上下文管理器怎么使用?上...
  • 上下文管理器是在Python2.5之后加入的功能,可以在方便的需要的时候比较精确地分配和释放资源, with便是上下文管理器的最广泛的应用, 比如: with open(test/test.txt,w) as f: f.write(hello) 这上会比使用try:.....
  • # try_except_finally try: f_read = open("Tom.txt") print("code started") raise KeyError f_read.close() #raise IndexError # 此时就没有捕获到异常,代码出错 f_read.close() # 打开正常时,才会执行该...
  • with语句和上下文管理器`启程“下面进行with语句的剖析,在自定义对象中支持with“进阶“加深理解“探索` 启程    with 语句究竟有哪些好处?它有助于简化一些通用资源管理模式,抽象出其中的功能,将其分解并重用...
  • with上下文管理器 语法:with … as … 如:with open(‘test.txt’, ‘r’) as fp,打开一个文件作为文件句柄对象赋值给fp with是一个语句块,上下文管理器中里面实现了两个方法:enter, exit,enter是进入代码块前...
  • 你想自己去实现一个新的上下文管理器,以便使用with语句。 解决方案 实现一个新的上下文管理器的最简单的方法就是使用 contexlib 模块中的 @contextmanager 装饰器。 下面是一个实现了代码块计时功能的上下文管理器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,367
精华内容 40,146
关键字:

with上下文管理器