• python中闭包和装饰器


    前言:

    编程语言发展的过程中,我们为了提高代码利用率,发明了函数式编程。函数将代码封装起来,我们需要用到此功能函数的时候,调用一下就可以了。但是使用的过程中,也遇到了一些问题,比如函数实现的功能不够,或者跟我们要实现的功能有些差别。肿么办呢?打开函数内部代码,重新写?可以吗?可以!但是这就违背了函数式编程思想的初衷,代码没有重复利用,而且还破坏了原有函数代码。怎么办?聪明的人类思想的灯泡再次闪亮,咔嚓一声霹雳响,闭包和装饰器诞生了!

    闭包:

    闭包的定义:

    • 外部函数中定义了一个内部函数
    • 内部函数中使用了外部函数的变量
    • 外部函数将内部函数作为返回值返回

    举例:

    def wai(x):
            def nei():
                    print(x)
            return nei
    
    a = wai(3)()

    在这个函数中,内部函数nei使用了外部函数的变量X,外部函数wai将内部函数作为返回值返回了。结果是3。a = wai(3)实际上是等同于a = nei ,后面价格括号,才是调用了函数nei。这就是为什么是a = wai(3)()

    闭包知道咋回事了,那么它实际意义是啥呢?装饰器就是它的实际应用

    装饰器:

    装饰器本身是一个闭包,只不过外部函数的变量变成了一个函数名。

    举例:

    # 定义装饰器
    def zhuang_xiu(fun):
            def nei():
                    print('吊顶')
                    fun()
                    print('地毯')
            return nei
    #要被装饰器装饰的函数
    def new_house():
       print('新房')
    print('使用装饰器前:')
    new_house()
    #使用装饰器
    print('使用装饰器后:')
    @zhuang_xiu
    def new_house():
            print('新房')
    new_house()

    运行结果:

    使用装饰器前:
    新房
    使用装饰器后:
    吊顶
    新房
    地毯

    这样,我们就在没有改变newhouse函数源代码的前提下,增加了功能,实现了我们的目的。大家理解了吗?不理解可以评论联系我哦!

  • 相关阅读:
    替换空格
    centos虚拟机 服务器搭建
    Java 深度遍历和广度优先遍历
    idea热部署Devtools
    idea字符编码设置
    idea破解详细教程
    Java序列化
    60+Git常用命令行
    LeetCode 236. 二叉树的最近公共祖先
    08 讲解v-cloak,v-text,v-html的基本使用
  • 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/9811876.html
Copyright © 2020-2023  润新知