Python--闭包,装饰器,设计模式,多线程

闭包

定义

在函数嵌套的前提下,内部函数使用了外部函数的变量,外部函数返回了内部函数,我们把使用外部函数变量的内部函数称为闭包。

def out(lo):
    def in1(word):
        # 内部函数使用了外部函数的lo
        print(f"{lo}说:{word}")
    # 外部函数返回了内部函数
    return in1

t1=out("小红")
t1("你好")
t1("吃饭了吗")
print( )
t2=out("小白")
t2("今天天气真好")
t2("我们出去玩吧")

函数in1称为闭包

修改外部函数变量的值--nonlocal

在内部函数中,想要修改外部变量,要先用关键字nonlocal来声明外部变量

def add1(num1):
    def add2(num2):
        nonlocal num1
        num1+=num2
        print(num1)
    return add2
t1=add1(100)
t1(50) # 结果:150
t1(90) # 结果:240

优缺点

优点:
无需定义全局变量即可实现通过函数,持续的访问、修改某个值。
闭包使用的变量的所用于在函数内,难以被错误的调用修改
缺点:
由于内部函数持续引用外部函数的值,所以会导致这一部分内存空间不被释放,一直占用内存

装饰器

装饰器在本质上是一个闭包,它的功能是在不破坏原有的功能和代码的情况下,为目标函数增加新的功能。

实现逻辑:

def outer(func):
    def inner():
        print("我要睡觉了")
        func()
        print("我要起床了")
    return inner

def sleep():
    import time
    print("睡眠中。。。。")
    time.sleep(1)

test=outer(sleep)
test()

装饰器语法:

def outer(func):
    def inner():
        print("我要睡觉了")
        func()
        print("我要起床了")
    return inner
@outer
def sleep():
    import time
    print("睡眠中。。。。")
    time.sleep(1)

sleep()

使用@outer定义在目标函数sleep之上(可以理解为,用outer来增加sleep的功能)

设计模式

单例模式

定义:

保证一个类只能有一个实例,并能提供一个访问它的全局访问点

新建file文件

class say:
    pass
Say=say()

test测试文件

from file import Say
t1=Say
t2=Say
print(id(t1)) # 结果:2170317543312
print(id(t2)) # 结果:2170317543312
优点:

节省内存

节省创建对象开销

工厂模式

定义:

将对象的创建由使用原生类本身创建转换到由特定的工厂方法创建


class person:
    pass
class stu1(person):
    pass
class stu2(person):
    pass
class student:
    def get_stu(self,name):
        if name=="小红":
            return stu1()
        else:
            return stu2()

Stu=student()
s1=Stu.get_stu("小红")
s2=Stu.get_stu("小白")
优点:

大批量创建对象的时候有统一的入口,易于代码维护当发生修改,仅修改工厂类的创建方法即可符合现实世界的模式,即由工厂来制作产品(对象)

多线程

进程

定义:程序在操作系统内完成,即成为一个运行进行

线程

定义:进程内部可以有多个线程,程序的运行本质上就是进程内部的线程实际工作。

并行执行

多个进程同时在运行,即不同的程序同时运行,称之为:多任务并行执行

一个进程内的多个线程同时在运行,称之为:多线程并行执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值