【python进阶】装饰器

装饰器

Python装饰器是一种用于拓展函数功能的高级语法特性,它的目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。

一个Python装饰器本质上是一个闭包,它接收一个函数作为参数,返回一个新的函数。这个新的函数通常会包装原函数,并在调用原函数之前或之后执行一些额外的逻辑。

在Python中,装饰器使用@语法糖进行定义和声明。下面是一个简单的装饰器示例:

def my_decorator(func):  
    def wrapper():  
        print("Before the function is called.")  
        func()  
        print("After the function is called.")  
    return wrapper  
  
@my_decorator  
def say_hello():  
    print("Hello!")  
  
say_hello()

带参数的装饰器

import time
def showtime(func):
    def wrapper(a,b):
        start_time = time.time()
        func(a,b)
        end_time = time.time()
        print('spend is {}'.format(end_time - start_time))

    return wrapper

@showtime
def sub(a,b):
    result=a-b
    print("计算结果是{0}".format(result))

sub(5,1)

一个函数还可以同时定义多个装饰器,比如:

@a
@b
@c
def f ():
    pass

它的执行顺序是从里到外,最先调用最里层的装饰器,最后调用最外层的装饰器,它等效于

f = a(b(c(f)))

闭包

闭包(Closure)是指一个函数嵌套在另一个函数中,并且内部的函数引用了外部函数的变量。这种引用关系使得内部的函数即使在外部函数执行完毕后,仍然能够访问和修改外部函数的变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值