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

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

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

相关文章
|
3月前
|
缓存 开发者 Python
Python编程中的装饰器深入解析
【9月更文挑战第20天】本文将带领读者深入了解Python编程中一个强大且神秘的功能——装饰器。我们将从装饰器的基本概念出发,逐步探索它的工作原理、使用场景以及如何自定义装饰器。文章不仅会用通俗易懂的语言解释复杂的技术概念,还将通过实际代码示例展示装饰器的强大功能和灵活性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往更高效、更优雅代码编写的大门。
45 11
|
6月前
|
开发者 Python
Python进阶:深入剖析闭包与装饰器的应用与技巧
Python进阶:深入剖析闭包与装饰器的应用与技巧
|
JavaScript 前端开发 编译器
StencilJs 学习之组件装饰器
Stencil 是一个生成 Web Components(更确切地说,是自定义元素)的编译器。Stencil 将最流行的框架的最佳概念结合到一个简单的构建时工具中。 现在让我们一起学习其中的装饰器部分。
110 0
|
7月前
|
JavaScript
如何使用 TypeScript 创建和使用装饰器
如何使用 TypeScript 创建和使用装饰器
50 0
|
7月前
|
JavaScript 前端开发 数据安全/隐私保护
TypeScript进阶(二)深入理解装饰器
TypeScript 是一种由微软开发的开源编程语言,它是 JavaScript 的超集,为 JavaScript 添加了静态类型检查和其他一些特性。装饰器是 TypeScript 中一个非常强大的特性,它可以用来修改类、方法、属性等的行为。本文将深入探讨 TypeScript 装饰器的原理和用法。
84 0
|
Python
Python编程:元类的简单使用
Python编程:元类的简单使用
83 0
Python编程:元类的简单使用
|
开发者
继承的基本使用 | 学习笔记
快速学习继承的基本使用,介绍了继承的基本使用系统机制, 以及在实际应用过程中如何使用。
继承的基本使用 | 学习笔记
|
Python
【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
126 0
【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
|
Python
【Python零基础入门篇 · 14】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
【Python零基础入门篇 · 14】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
【Python零基础入门篇 · 14】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)