Python----装饰器

Python学习之路,点击有全套Python笔记

闭包

内部函数对外部函数作用域里变量的引用。
函数内的属性,都是有生命周期的,都在函数的执行期间。
闭包内的闭包函数私有化了变量,完成了数据的封装,类似于面向对象

my_list = [1]
def func(obj):
    print('func:', obj)
    def func1():
        obj[0] += 1
        print('func1:', obj)
    return func1
var = func(my_list)  # func:[1]
var()  # func[2]
var()  # func[3]
var()  # func[4]
装饰器 @

本质:闭包函数
存在的意义:不影响原有功能,还能添加新的功能,也有解耦的功能

# 普通装饰器
def func1(func):
    def add_func():
        print('这是我要添加的功能')
        return func()
        # func 函数名
        # func() 函数调用
    return add_func()

@func1
def func2():
    print('hello world')

func2  
# 这是我要添加的功能
# hello world
# 被装饰的函数带参数
def func1(func):
    def func2(a, b):
        print(a, b)
        return func(a, b)
    return func2

@func1
def func(x, y):
    print('this is a add func')
    print(x + y)
func(1,1) 
# 1 1
# this is a add func
# 2
# 装饰器函数带参数
def arg_func(arg):
    def _func(func):
        def _func1():
            if arg == 'good':
                print('出去玩')
            if arg == 'bad':
                print('不出去玩')
            return func()
        return _func1
    return _func
# arg_func 装饰器函数的参数接收函数,因为装饰器函数只能是接收一个函数作为参数
# arg_func -> _func 接收我们装饰器函数的参数
# _func -> _func1 闭包函数 添加功能
# _func1 -> func 执行添加的功能,执行被装饰的函数
@arg_func('bad')
def func():
    print('bad day')
@arg_func('good')
def func1():
    print('good day')
func()
func1()
# 不出去玩
# bad day
# 出去玩
# good day
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值