【详解】Python-----------闭包和装饰器

闭包的定义与实现

1)定义
闭包就是指有权访问另一个函数作用于中的变量的函数,具有提高代码可复用性的作用。

2)实现闭包的三个条件
闭包的另一个常用场景就是装饰器

 - 函数里面嵌套函数
 - 内部函数使用了外部函数的临时变量
 - 外部函数的返回值是内部函数的引用

验证闭包的实现条件

1)代码

# 定义函数不执行函数里面的代码,调用函数和时才执行函数里面的代码
# 所以次代码返回值时wrapper
def timeit(name):
    # wapper 包装纸
    def wapper():
        print(name)     # 内部函数使用外部函数的变量
        return 'ok'
    return wapper       # 外部函数的返回值是内部函数的引用(函数名)

result = timeit("lyqiu")
print(result)

2)结果展示
调用timeit函数,函数的返回值是wrapper函数引用,上面代码中的result就是wrapper函数
在这里插入图片描述

调用函数

1)代码

# 方法1
result1 = result()      # result的结果是wapper的函数名,此处等同于result1 = wapper()进行函数的调用
print(result1)

# 方法2
print(result())		#直接在result = timeit('lyqiu') 后打印输出result()

在这里插入图片描述

2)结果展示
在这里插入图片描述

装饰器的定义

  • 器指的是工具,而程序中的函数就是具备某一功能的工具,所以装饰器指的是为被装饰器对象添加额外功能的工具/函数,装饰器就是用来装饰函数或类的工具
  • 装饰器其实就是在遵循以下两个原则(开放封闭原则)的前提下为被装饰对象添加新功能
开放 封闭
对扩展开放 对已经实现的功能代码块封闭,不修改被装饰对象的源代码

装饰器的实现

 - 装饰器本质上是一个函数,该函数是用来处理其他函数。
 - 它可以让其他函数在不需要求改代码的前提下增加额外的功能
 - 并且装饰器的返回值也是一个函数对象
 - 装饰器装饰的是函数/类,所以需要传递的参数是函数名或者类名
 - 使用时:  @装饰器名字

装饰器的应用(一)

分为创建装饰器和使用装饰器这两部分
通过下载音乐的练习,使我们对装饰器的使用有一个初步了解

1)实验前提

  • pip3 install requests -i https://pypi.douban.com/simple安装
    在这里插入图片描述
  • 为计算下载时间可以使用时间戳
    在这里插入图片描述

2)代码

import time        #时间处理模块
import requests		#HTTP请求库,多用于网络爬虫,需要pip install下载

# 1.如何去创建装饰器
#需求:添加功能-计算被装饰函数运行的时间的工具
def timeit(f):
    def wrapper():      #添加被装饰函数执行的时间
        start = time.time()		#函数执行之前计算当前的时间戳
        result = f()			#调用被装饰的函数,并保存函数的返回值
        end = time
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值