ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python基础-装饰器

2022-08-29 20:03:40  阅读:193  来源: 互联网

标签:函数 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
来源: https://www.cnblogs.com/hcx990214/p/16637157.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有