首页 > 编程语言 >python基础-装饰器

python基础-装饰器

时间:2022-08-29 20:03:25浏览次数:93  
标签:函数 people python create 基础 koushui print 装饰 def

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("抓把泥,捏个人,吹口气, 活了!"
 

标签:函数,people,python,create,基础,koushui,print,装饰,def
From: https://www.cnblogs.com/hcx990214/p/16637157.html

相关文章

  • python基础-生成器,列表推到式
    python基础-生成器,列表推到式 一. 生成器什么是生成器?.生成器实质就是迭代器.在python中有三种方式来获取生成器:通过生成器函数通过各种推导式来实......
  • python基础.内置函数(二),递归函数,二分法
    python基础.内置函数(二),递归函数,二分法  一.lamda匿名函数为了解决一些简单的需求而设计一句话函数 lambda表示的是匿名函数.不需要用def来声明, 一句话......
  • python基础-内置函数
    python基础-内置函数 什么是内置函数?就是python给你提供的.拿来直接用的函数,比如print.,input等等.截止到python版本3.6.python一共提供了了68个内置函数.他们......
  • vue3基础入门
    vue3基础入门官方网站:https://v3.vuejs.org/中文文档:https://staging-cn.vuejs.org/guide/introduction.html1、简介1.1、vue是什么?Vue.js(读音/vjuː/,类似于vi......
  • Git_基础理论
    三个区域Git本地有三个工作区域:工作目录(WorkingDirectory)、暂存区(Stage/Index)、资源库(Repository或GitDirectory)。如果在加上远程的git仓库(RemoteDirectory)就可......
  • python开发环境
    安装配置AnacondaAnaconda主要为科学计算提供运行环境,在其内部集成了Python。如果之前没有安装过Python,可以直接安装Anaconda,不需要再单独安装Python。Anaconda可以......
  • 服务器基础和硬件架构
    1、服务器基础1) 服务器的逻辑架构:2) 服务器硬件:主要包括:处理器、内存、芯片组、I/O设备(RAID卡、网卡、HBA卡、HCA卡)、I/O总线(PCle标准)、硬盘、机箱(电源、风扇)、管理......
  • Kafka基础概念
    参考文献基本概念这里理解分区Partitionoffset理解基本概念Topic是一个逻辑概念,相当于给消息分配的标签Partition分区,topic中的消息被分割为一个或多个的......
  • 自动下载视频、弹幕、评论软件【python制作】
    前言嗨喽,大家好呀~这里是爱看美女的茜茜呐又到了学Python时刻~激不激动,开不开森!  今天我们来实现一个Python采集视频、弹幕、评论一体的小软件。平常咱们都是......
  • Linux快速入门(一)Linux基础知识
    我的环境:Ubuntu认识命令行命令行窗口:可以看到第一行guebiqing@ubuntu:~$。这一行中gubeiqing显示的是当前用户名,ubuntu是当前的主机名,~表示我门当前所在目录是用户家......