装饰器的基本使用|学习笔记

简介: 快速学习装饰器的基本使用

开发者学堂课程【Python 入门 2020年版装饰器的基本使用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10348


装饰器的基本使用

 

内容介绍

一、 优化计算代码执行时长

二、 装饰器的结构

三、 装饰器语法的使用

 

一、优化计算代码执行时长

1、def cal_time(fn):

start = time.time()

fn()

end = time.time()

print('代码运行耗时()秒'.format(end - start))

在一些语言里,如果想计算一段代码的执行时长,这样写就已经是最优化的一个写法了,但是在python里更加高级。

现在想要计算时间,用装饰器就能够做了,直接写demo(),然后写foo(),这样写完之后,它就能够告诉执行了多长时间,这是 Python独有的一个优化。

import  time

def demo():

x=0

for i in range(1,100000000):

x += i

print(x)

def foo():

print('hello')

time.sleep(3)

print('world')

demo()

foo()

 

二、装饰器的结构

1、def cal_time(fn):

def inner():

start= time.time()

fn()

end = time.time()

print('代码耗时',end - start)

return  inner

@cal_time

def demo(): I

x=0

for i in range(1,100000000):

x+=i

print(x)

写完这个代码后运行一下,就会得到运行时间。这个代码的结构是函数里面套函数,一定要记住这个结构。

首先要定义一个外部函数,写什么名字都行,然后里面需要一个参数,写完@cal_time后,@cal_time是这个外部函数cal_time的名字。

它叫装饰器的语法糖,就是语法里面内部实现的,讲一下它的原理,一般情况下是不会让自己写装饰器的。

 

三、装饰器语法的使用

1、def  cal_time(fn):

print('我是外部函数,我被调用了!!!')

def  inner():

start = time.time()

fn()

end = time.time()

print('代码耗时',end-start)

return inner

@cal_time

def demo(): I

x=0

for i in range(1,100000000):

x+=i

print(x)

第一件事是调用cal_time,运行结果是‘我是外部函数,我被调用了’,也就是只要写了@cal_time,它立刻会调def  cal_time这个函数。

第二件事把被装饰的demo函数传给fn,打印一下fn:print(‘fn={}’.format(fn)),运行结果fn是demo函数,这个是装饰语法自己做的事,inner函数没有被调用。

2、第三件事,当再次调用demo函数时,此时demo函数已经不再是上面的demo了,打印一下demo

print('装饰后的demo ={ }'.format(demo))

demo

调dmeo时已经不再是调def demo()这个函数了,它变成了装饰器函数的返回值,也就是inner函数,它俩不是一个东西了。

其实中间有一个过程, fn指向了之前的demo,现在再写demo函数的时候指向的是inner函数,写demo(),这个其实是在执行 inner函数,inner再调一下fn,

fn是以前的demo函数:

x=0

for i in range(1,100000000):

x+=i

print(x)

再调一下时间然后再减一下,这个时候就能够算出demo函数它的执行时间,这个就是基本装饰器语法的一个使用。

这是Python语法糖的内部实现,语法糖就是通过一些语法,会实现一些比较复杂的功能,到底是怎么做的不用管。

相关文章
|
1月前
|
设计模式 开发框架 测试技术
探索Python编程中的装饰器
【9月更文挑战第36天】在Python的世界里,装饰器是一个既神秘又强大的工具。它们不仅能够增强函数的功能,还能让代码更加简洁和模块化。本文将通过实例介绍装饰器的基本概念、使用方法以及如何自定义装饰器,旨在帮助读者掌握这一实用技术,从而提升代码的可读性和复用性。
|
2月前
|
缓存 开发者 Python
Python编程中的装饰器深入解析
【9月更文挑战第20天】本文将带领读者深入了解Python编程中一个强大且神秘的功能——装饰器。我们将从装饰器的基本概念出发,逐步探索它的工作原理、使用场景以及如何自定义装饰器。文章不仅会用通俗易懂的语言解释复杂的技术概念,还将通过实际代码示例展示装饰器的强大功能和灵活性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往更高效、更优雅代码编写的大门。
40 11
|
2月前
|
Python
探索Python编程中的装饰器魔法
【9月更文挑战第26天】在Python的世界里,装饰器就像是一把瑞士军刀,小巧而功能强大。它们让代码更简洁、可维护性更强。本文将通过实际示例,带你领略装饰器的魔力,从基础到进阶,一步步揭开它的神秘面纱。
17 2
|
3月前
iouring基本使用
iouring基本使用
55 0
|
3月前
|
网络安全 Perl
Nikto——基本使用
Nikto——基本使用
57 0
|
6月前
|
Python
Python编程中的装饰器应用探索
【2月更文挑战第6天】本文将深入探讨Python编程中装饰器的应用,介绍装饰器的定义、作用以及实际应用场景,并结合示例代码详细阐释装饰器在函数、类等方面的灵活运用,帮助读者更好地理解和使用装饰器提升代码的可复用性和可维护性。
|
6月前
|
存储 NoSQL 定位技术
RedisGEO的基本使用
对GEO的基本介绍
|
Python
Python编程 装饰器
Python编程 装饰器
99 0
|
Python
Python编程:元类的简单使用
Python编程:元类的简单使用
81 0
Python编程:元类的简单使用
下一篇
无影云桌面