zoukankan      html  css  js  c++  java
  • python基础-装饰器

    什么是装饰器?

      不改变函数原来的调用方式 动态地 给函数 添加功能

    装饰器的原则是什么?

      装饰器遵循: 开放 封闭原则
    • 对添加新功能是开放的
    • 硬改已经存在的代码

    装饰器使用场景

    装饰器一般用于动态添加功能,相当于对原来的函数进行扩展,python中叫语法糖 一般改别人代码,不想改动原来的功能代码,直接使用装饰器给这个方法添加新功能

    学习装饰器之前,先对函数进行简单的复习

    # 1. 函数的定义等
    # def func():
    #     print("哈哈哈")
    
    
    # func()  # 函数的调用
    # print(func)  # 函数的内存地址
    # # 2. 函数可以像变量一样用来赋值
    # yingying = func  # 函数可以作为变量去赋值
    
    # yingying()  # 相当于执行了原来的func()
    
    
    # 3. 函数名可以像普通变量一样放到容器(列表、字典、元组...)中
    # def f1():
    #     print("f1")
    
    
    # def f2():
    #     print("f2")
    
    
    # list1 = [f1, f2]
    # for i in list1:
    #     i()
    
    
    # # 4. 函数可以当成参数传到别的函数中
    # def f3(arg):
    #     arg()
    #
    #
    # f3(func)
    
    
    # 5. 函数可以作为返回值
    def f4():
        def f5():
            print("iPhone Xs MAX太贵啦...")
        return f5
    
    
    ret = f4()
    print(ret)
    ret()

    写一个函数装饰器

    def create_people():
        # print("加口唾沫~")  # 违背了封闭原则
        print("抓把泥,捏个人,吹口气, 活了!")
    
    
    # def koushui_create_people(arg): #装饰器内部用的就是这个机制,首先使用了闭包,在不改变原先函数的基础上添加新功能
    #     def inner():
    #         print("加口唾沫")
    #         arg()
    #         print("上个色儿~")
    #     return inner
    
    # create_people()
    # create_people()
    # create_people()
    
    # koushui_create_people()
    # koushui_create_people()
    # koushui_create_people()
    
    # ret = koushui_create_people(create_people)
    # print(ret)
    # ret()
    
    
    create_people = koushui_create_people(create_people)
    
    
    create_people()
    # 加口唾沫~
    # 抓把泥,捏个人,吹口气, 活了!
    # 语法糖
    def koushui_create_people(arg):
        def inner():
            print("加口唾沫")
            arg()
            print("上个色儿")
        return inner
    #需要注意的点:1.定义方法必须在被装饰的函数的上面执行.
                  # 2.inner记住不能加(),如果加了括号我定义的函数回立刻执行把结果返回了
    
    @koushui_create_people
    def create_people():
        # print("加口唾沫~")  # 违背了封闭原则
        print("抓把泥,捏个人,吹口气, 活了!"
    幻想毫无价值,计划渺如尘埃,目标不可能达到。这一切的一切毫无意义——除非我们付诸行动。
  • 相关阅读:
    Java StringBuilder、基本类型的包装类
    立个Flag不学好PHP誓不罢休
    LAMP搭建 转
    CentOS使用yum源中自带的rpm包安装LAMP环境
    CentOS RedHat YUM 源扩展补充(32位、64位均有)
    解决phpmyadmin上传文件大小限制的配置方法
    lanmp v2.5一键安装包发布(包括lamp,lnmp,lnamp安装)
    图像处理 jpg png gif svg
    NAT模式/路由模式/全路由模式 (转)
    网页制作中绝对路径和相对路径的区别
  • 原文地址:https://www.cnblogs.com/TodayWind/p/13052715.html
Copyright © 2011-2022 走看看