python2.7装饰器使用_python中的装饰器介绍及使用方法

Python装饰器允许在不修改原有函数代码的情况下,为函数添加额外功能,如日志、性能测试等。文章通过一个计算函数运行时间的例子,展示了如何创建和使用装饰器。装饰器使用@符号进行应用,并强调了装饰函数需返回一个函数对象。同时,文中还介绍了如何处理装饰器的参数,以及在装饰器中传递参数的方式。
摘要由CSDN通过智能技术生成

GpH3uKP4yRIfHvbL.jpg

Python装饰器本质上是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器返回的值也是一个函数对象。

它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计。

python提供了@符号作为装饰器的语法糖,使我们更方便的应用装饰函数。但使用语法糖要求装饰函数必须return一个函数对象。

我们下来举一个例子:

比如我们要获取一个函数的运行时间:

# -*- coding:utf-8 -*-

from time import sleep, time

from random import randint

def main_test1():

start_time = time()

for i in range(10):

print('执行结果 %s' % i)

sleep(randint(2, 5))

end_time = time()

print('执行总时间:%s秒' % (end_time - start_time))

if __name__ == '__main__':

main_test1()

通过结束时间减去开始时间获取执行的时间,但是如果我们有N多个方法里都要获取执行时间,就需要每个方法里都去写一遍,这时候我们可是通过装饰器来实现这已功能:

def run_time(func):

def main():

start_time = time()

func()

end_time = time()

print('执行总时间:%s秒' % (end_time - start_time))

return main

@run_time

def main_test2():

for i in range(10):

print('执行结果 %s' % i)

sleep(randint(2, 5))

if __name__ == '__main__':

main_test2()

装饰器通过@符实现,在需要执行的方法上定义执行函数,相当于把 main_test2() 函数作为参数传递给 run_time() 函数:run_time(main_test2)

通过装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。

装饰器传递参数

def run_time(func):

def main(a='', b=''):

print(a, b)

func(a, b)

return main

@run_time

def main_test2(a='', b=''):

print(a, b)

if __name__ == '__main__':

main_test2('aaaa', 'bbbb')

需要注意的是参数记得使用默认值或者使用不定长传参,如果变量不传递参数又没有默认值,方法会报错

另外在 func 方法调用的时候记得把参数回传。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值