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

 

posted @ 2020-06-05 22:48  断浪狂刀忆年少  阅读(177)  评论(0编辑  收藏  举报