日常学习(一)Python修饰器

Python修饰器

1.什么叫做闭包?

答: 闭包是内部函数对外部函数作用域内部变量的引用

闭包的详细定义:
  1. 函数内的属性,都是有生命周期的,都是在函数执行期间
  2. 内部函数对外部函数作用域内变量的引用
  3. 闭包内的闭包函数私有化了变量,完成了对数据的封装,类似于面向对象

2.为什么要用装饰器,直接改原函数不好吗?

答: 装饰器可以在不影响原有函数功能的情况下,添加新的功能

  1. 简单装饰
#简单装饰
def decorate(func):
    def wrap():
        print("I need to decorate this function")
        return func() #返回被装饰函数的调用
    return wrap

# return func 返回一个集装箱
# return func() 返回一个函数调用

@decorate
def mysum():
    print("sum")
    
#mysum() -> decorate(mysum)() ->   wrap()
mysum()

2.带参数的装饰

#带参数的装饰
def decorate(func):
    def wrap(a,b):
        print("I need to decorate this function")
        a = a + 5
        b = b + 5
        return func(a,b) #返回被装饰函数的调用
    return wrap

# Python3中参数可以用中文

@decorate
def mysum(a,b):
    print("sum",a+b)
    
#mysum(1,2) -> decorate(mysum)(1,2) ->  wrap(1,2)
mysum(1,2) #无修饰是3,有修饰是13

3.不同函数用同一个修饰器修饰

#不同函数用同一个修饰器修饰
def arg_decorate(method):
    def decorate(func):
        def wrap(a,b):
            print("I need to decorate this function")
            if method == "sum":
                a = a + 5
                b = b + 5
            elif method == "minus":
                a = a + 5
                b = b - 5
            return func(a,b) #返回被装饰函数的调用
        return wrap


@arg_decorate(method="sum")
def mysum(a,b):
    print("sum",a+b)
    
@arg_decorate(method="minus")   
def myminus(a,b):
    print("minus",a-b)
    
#mysum(1,2) -> decorate(mysum)(1,2) ->  wrap(1,2)
mysum(1,2) #无修饰是3,有修饰是13
myminus(2,1)# 无修饰是1,有修饰是11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值