Python 装饰器

本文介绍了Python编程中的装饰器概念,遵循开放封闭原则,强调装饰器对扩展开放但对源代码修改封闭。内容涵盖了标准装饰器的使用,包括其语法糖特性;带参数的装饰器,展示了如何在装饰器外层添加参数;以及如何使用多个装饰器同时装饰一个函数,说明了装饰器的执行顺序。通过这些,读者将更好地理解和运用Python装饰器。
摘要由CSDN通过智能技术生成
开放封闭原则:
对扩展开放
对修改源代码和调用方式是封闭
装饰器:
# def warpper(f):
#     def inner(*args,**kwargs):
#         print("被装饰函数执行前")
#         ret = f(*args,**kwargs)
#         print("被装饰函数执行后")
#         return ret
#     return inner
#
# @warpper
# def func(*args,**kwargs):
#     print(f"被装饰的{args,kwargs}")
#     return "我是func函数"
# print(func(1,2,3,4,5,6,7,8,a=1))


# def warpper(f):
#     def inner(*args,**kwargs):
#         f(*args,**kwargs)
#     return inner
#
# @warpper
# def func():
#     print(111)
1. 标准版装饰器:
# def func(f):
#     def foo(*args,**kwargs):
#         ret = f(*args,**kwargs)
#         print("被装饰之后")
#         return ret
#     return foo
#
# @func
# def func1(*args,**kwargs):
#     print("被装饰函数")
#     return args,kwargs
# print(func1(1,2,3))
标准装饰器拆解:
 import time

 def warpper(f):

 def inner(*args,**kwargs):
     print("被装饰函数执行前")
     ret = f(*args,**kwargs)
     print("被装饰函数后")
     return ret
 return inner

 def func(*args,**kwargs):
     print(f"被装饰的{args,kwargs}")
     return "我是fubnc函数"

 func = warpper(func)
 print(func(1,2,3,4,5,6,a = 1))
语法糖:写在被装饰函数的正上方
语法糖和被装饰的函数之间可以有空行但是不建议这样写
装饰器一定要写在被装饰函数的前面
2. 带参数的装饰器:
有参: 在标准装饰器的外层,套了一层,多套一层就需要额外的调用一层
语法糖:@auth(参数)
有参装饰器:
def warpper(func):
    def inner(*args,**kwargs):
        user = input("user:")
        pwd = input("pwd:")
        if user == 'alex' and pwd == "dsb":
            func(*args,**kwargs)
    return inner

@warpper
def foo():
    print("被装饰的函数")

foo()
3. 多个装饰器装饰一个:
多个装饰器装饰一个函数的时候,先执行离被装饰函数最近的装饰器
# def auth(func): # wrapper1装饰器里的 inner
#     def inner(*args,**kwargs):
#         print(123)
#         func(*args,**kwargs)
#         print(321)
#     return inner
#
#
# def wrapper1(func): # warpper2装饰器里的 inner
#     def inner(*args,**kwargs):
#         print(111)
#         func(*args,**kwargs)
#     return inner
#
#
# def wrapper2(func):  # 被装饰的函数foo
#     def inner(*args,**kwargs):
#         print(222)
#         func(*args,**kwargs)
#         print(567)
#     return inner
#
#
# @auth
# @wrapper1
# @wrapper2
# def foo():
#     print("www.baidu.com")
# foo()
# import time
# time.time()  #时间戳 -- 浮点数
# time.sleep(1)  # 秒  -- 睡眠 -- 阻塞

# 7  --  1
# 3  -- 0.5
# 4  -- 0.5
# 6  -- 0.3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值