Python--关于装饰器,最基础的理解(不包括闭包。。递归。。)

简单来说,装饰器的作用就是为已经存在的函数或对象添加额外的功能。

先来定义一个简单的函数

def say_hello():
    print("hello!")

那么我们现在想实现这样一个功能:打印出这个函数的名称。但是又不能修改这个函数的代码,(遵循了开闭原则),这个时候装饰器就要登场了

def print_name(func):
    print("[func_name]: %s ()" % func.__name__)
    return func()

这就是一个简单的装饰器,他所具有的功能就是在被他装饰的函数会打印"[fun_name]: %s ()" % func.__name__,
装饰器的使用就是在需要被装饰的函数的上面一行加上@(语法糖),后面是写好的装饰器名称

@print_name
def say_hello():
    print("hello!")

say_hello()
==============输出=============
[func_name]: say_hello ()
hello!

下面解决一下装饰有参数的函数的装饰器

    先写一个带参数的函数

def say(something):
    print("hello {}!".format(something))

    当被装饰的函数需要传递参数,装饰器如下

def print_name(func):
    def wrapper(something1):  # 指定一毛一样的参数
        print("[name]: {}()".format(func.__name__))
        return func(something1)
    return wrapper  # 返回包装过函数

    装饰器效果如下

@print_name
def say(something):
    print("hello {}!".format(something))

say("wuhan fighting!!")
================输出==============
[name]: say()
hello wuhan fighting!

再进一步,装饰器需要传参呢

# ============带参数的装饰器==============
# 这层传入装饰器的参数
def logging(level):
    # 这层传入要装饰的函数
    def wrapper(func):
        # 这层传入要装饰的函数的参数
        def inner_wrapper(*args, **kwargs):
            print("[{level}]: enter function {func}()".format(
                level=level,
                func=func.__name__))
            return func(*args, **kwargs)
        return inner_wrapper
    return wrapper

    看效果

@logging(level='INFO')
def say(something):
    print("say {}!".format(something))

say('武汉加油!!')

================输出==================
[INFO]: enter function say()
say 武汉加油!!!

武汉加油!!中国加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值