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

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

开发者学堂课程【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语法糖的内部实现,语法糖就是通过一些语法,会实现一些比较复杂的功能,到底是怎么做的不用管。

相关文章
|
8月前
|
开发者 Python
Python进阶:深入剖析闭包与装饰器的应用与技巧
Python进阶:深入剖析闭包与装饰器的应用与技巧
|
9月前
|
JavaScript
如何使用 TypeScript 创建和使用装饰器
如何使用 TypeScript 创建和使用装饰器
60 0
|
9月前
|
数据安全/隐私保护 Python
解释装饰器(decorator)的功能和用法。
解释装饰器(decorator)的功能和用法。
64 1
|
JavaScript
TypeScript 中「类」的基本使用
TypeScript 中「类」的基本使用
63 0
|
Python
Python编程:元类的简单使用
Python编程:元类的简单使用
89 0
Python编程:元类的简单使用
|
开发者
继承的基本使用 | 学习笔记
快速学习继承的基本使用,介绍了继承的基本使用系统机制, 以及在实际应用过程中如何使用。
继承的基本使用 | 学习笔记
|
前端开发
react实战笔记14:静态属性和方法
react实战笔记14:静态属性和方法
122 0
react实战笔记14:静态属性和方法
|
Python
【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
137 0
【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
|
Python
【Python零基础入门篇 · 14】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
【Python零基础入门篇 · 14】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
【Python零基础入门篇 · 14】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)

热门文章

最新文章