Python精进之路之上下文管理器

本文详细介绍了Python编程中的上下文管理器、迭代器和装饰器的概念与用法。上下文管理器用于管理程序的特定状态,通过`with`关键字自动执行资源的获取和释放。迭代器则实现了容器中元素的迭代,允许按需生成数据,减少内存消耗。装饰器则提供了一种不修改原有函数代码即可为其添加额外功能的优雅方式。文章通过实例代码展示了这些概念的使用,并探讨了生成器在内存优化方面的优势。此外,还讨论了Python中的语法糖,如`@`符号在装饰器中的作用。
摘要由CSDN通过智能技术生成

本专题的内容结构:

unit1:精进的Python语法:

    (1),上下文管理器:

        上下文Conteext:程序执行中的某个状态

            >程序执行所需的一些内外部参数,构成了程序运行时状态

            >上下文是用来表达程序运行状态的概念,对应内存状态

            >上下文是程序中断保留或恢复运行的重要状态信息

        上下文管理器:一个可以在程序中加载独立上下文的对象

            >万物皆对象:上下文管理器也是一个对象,管理着一个独立上下文区域

                简单说就是在程序中可以停止程序,运行程序的对象

            >上下文管理器使用with 显示创建

            >进入和退出分别对应 __enter__() 和__exit__() 方法

            

            简单实例:用它来管理文件的操作:

                with open("python123.txt",'r') as f:

                    for line in f:

                        print(line)

               

                >with结束后,文件被自动关闭

                也可以打开多个文件:

                    with open("a.txt",'r') as fi,open("b.txt",'w') as fo:

                        for line in fi:

                            fo.write(line)

                >with 结束后,两个文件都会被关闭

                因为进入(__enter__())时操作的是打开文件,所以离开时,会关闭这个操作

            自定义上下文管理器:

                class DemoClass:

                    def __init__(self,name):

                        self.name= name

                    def __enter__(self):

                        print("进入上下文管理器")

                        return self

                    def __exit__(self, exc_type, exc_val, exc_tb):

                        print("退出上下文管理器")

                    def run(self):

                        print("DemoClass 的某个实例对象在运行")

                with DemoClass("python123") as d:

                    d.run()   

                输出:

                    进入上下文管理器

                    DemoClass 的某个实例对象在运行

                    退出上下文管理器

                注:如何使用上下文管理器:

                    >1,with要配合特定对象使用

                    >2,Python支持:

                        file,

                        decimal.Context,

                        thread.LockType,

                        threading.Lock,

                        threading.RLock,

                        threading.Condition,

                        threading.Semaphore,

                        threading.BoundedSempahore

                    >用户也可自定义对象

                自定义的open类:

                    class MyOpenClass:

                        def __init__(self,name,mode):

                            self.name= name

                            self.mode= mode

                        def __enter__(self):

                            print("进入上下文管理器")

                            if self.mode == 'r':

                                self.f = open(self.name,self.mode)

                            else:

                                self.f= open(self.name,self.mode)

                            return self #重点,要将self, 它返回的就是as 后面的那个

                        def __exit__(self, exc_type, exc_val, exc_tb):

                            self.f.close()

                            print("退出上下文管理器")

                        def read(self):

                            return self.f.read()

                        def write(self,s):

                            self.f.write(s)

                    with MyOpenClass("d:/test.txt",'r') as f1,MyOpenClass("d:/test02.txt",'w') as f2:

                        txt = f1.read() #从f1中读

                        print(txt)

                        f2.write(txt)  # 写到f2中去

    (2),迭代器类型:

        迭代器类型 Iterator Types :实现容器中元素的迭代:

            >Container:包含一组元素的数据类型,如 全部组合数据类型

            >迭代器:容器之上的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperSpinach

动力源泉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值