Python 闭包函数,装饰器,生成器

1. 闭包函数

定义: 在函数嵌套的前提下, 内部函数使用了外部函数的变量,并且外部函数返回了内部函数的引用(内部函数的名字)

闭包的核心就是内部函数使用了外部函数的变量,这个过程就是闭包

闭包的构成条件:

一定要在函数的嵌套下构成

内部函数一定要使用到外部函数的值

外部函数一定要返回内部函数的引用(内部函数的名字)

def out(num1):
    def inner(num2):
        result = num2+num1

        print(f"外部函数的值:{num1},内部函数的值{num2},"
              f"相加的结果为{result}")

    return inner

f = out(100)

f(200)

2.装饰器

概念: 就是可以在不修改原来代码的基础上(函数原来的功能),为需要被装饰的函数或者类增加新的功能或者添加限制条件来帮助输出

简单来说就是 不修改原来代码, 增加新的功能或限制条件

装饰器的分类:   函数装饰器  类装饰器   带参数装饰器

构造条件(定义):  装饰器本质就是一个闭包函数 

返回值一定是一个函数的引用(函数的名字)

装饰器只能必须具有一个形参 形参是用来接收函数的引用(被装饰函数的名字)

装饰器语法糖写法 :

带参数的装饰器

def mark(flag):
    def out_func(fn):
        def inner_func(num1, num2):
            if flag == '+':
                print(f"你输入的实参是{flag},正努力加法运算中...")
                result = fn(num1,num2)
            elif flag == '-':
                print(f"你输入的实参是{flag},正努力加法运算中...")
                result = fn(num1, num2)
            else:
                result = "输入错误"
            return result;

        return inner_func

    return out_func

@mark("+")
def add(num1,num2):
    print(num1+num2)

@mark("-")
def sub(num1,num2):
    print(num1-num2)


add(1,1)
sub(2,1)

3.生成器

概念: 当函数中使用了yield关键字那么该函数就是生成器

yield和return关键字功能一样,就是返回值,并且结束当前函数的执行,区别就是下次调用该函数会从yield下面继续执行代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值