装饰器一波懂

# -*-coding:utf-8-*-
# 想搞懂装饰器首先先得知道闭包

def function(arg):
    def wapper():
        return arg

    return wapper


print(function(1)())  # 这个函数内层函数调用了外层函数中的变量就会产生闭包,例如左边传了个1,最后则返回1


# 若传进去的是一个函数了???势必会写成下边这样,就是不带参数装饰器
def fun01(func):
    def wapper(*args, **kwargs):
        print('你好')
        return func(*args, **kwargs)

    return wapper


@fun01
def sayhello(a):
    print('{:>10}你好'.format('>>:>10'))
    print(a)


"""
  python中的语法糖相当于fun01(sayhello)(a)  这块稍微有点逻辑需要思考一下这个,fun01(sayhello)现在就是内层函数wapper,
  sayhello的参数坑定是wapper(a),这块看不懂的话可以看看下边内层wapper参数来的原理,也是困扰了我好久
"""

sayhello('不想见')

"""
 如果装饰器相加参数了,可以想象一下,上边的装饰器就属于一个整体,就可以在代码不变的情况下加功能,是不不需要做啥改变,如若想要加参数来供自己后续使用,是不只需在外层添加个方法然后返回内层函数。然后函数内部是不就可以使用这个参数了。
"""


# 带参数装饰器
def fun04(a):
    def fun03(func):
        def wapper(*args, **kwargs):
            print('a is {:>10}'.format(a))
            print(args)
            return func(*args, **kwargs)

        return wapper

    return fun03


# 闭包原理,也是wapper参数如何来的原理---------------------------------------
def wapper(func):
    return func


def func(a):
    print(a)


wapper(func)(1)


# -------------------------------------------------------------------------

@fun04('大家好,我是巴啦啦小魔仙')
def all_begin(a, b):
    print('全身变')


all_begin(1, 2)

参考链接:
https://www.cnblogs.com/cicaday/p/python-closure.html
https://www.cnblogs.com/cicaday/p/python-decorator.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值