闭包函数与装饰器
2022/7/5 23:26:16
本文主要是介绍闭包函数与装饰器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
闭包函数简介
闭包函数 1、定义在函数内部的函数 2、内部函数使用了外部函数名称空间中的名字 ps:只有符合上述两个特征的函数才能称之为闭包函数 def func(username): # username = 'curry' def index(): print(username) return index # 思考如何在全局调用index # res = func() # print(res) # res() func('curry') # username = 'curry'
闭包函数实际应用
1、给函数体胆码传值得方式:通过形参 def func(xxx): print(xxx) 2、给函数体代码传值得方式:闭包函数 def index(username): # username = 'curry' def func(): print(username) return func res = index('curry') res() # curry res() # curry res() # curry res1 = index('jason') res1() # jason res1() # jason res1() # jason
装饰器简介
1、装饰器的本质 在不改变或装饰对象原来的“调用方式”和“内部代码”的情况下给装饰对象添加新的功能 eg: def func(): print(123) func() # 每次执行之前需要校验用户身份 2、装饰器的原则 对修改封闭 对扩展开放 import time 3.知识储备 print(time.time()) # 1657017466.4727514 '''时间戳(秒数):当前距离1970年1月1日0时0分0秒所经历的秒数''' # 实际应用>>>:统计代码的运行时间 # start_time = time.time() # for i in range(1000): # print(i) # end_time = time.time() # print('for循环的执行时间是:%s'%(end_time-stat_time)) time.sleep(3) '''让程序原地等待三秒''' print('小张睡不醒')
装饰器前期推导
import time def index(): time.sleep(3) print('from index') '''统计index函数的执行时间''' start_time = time.time() # 在调用index函数之前获取一下时间戳 index() # 调用index函数 end_time = time.time() print(end_time - start_time) """ 缺陷 如果有多个index需要统计时间 则需要重复编写代码 解决措施: 封装成函数 """ def get_time(): start_time = time.time() # 在调用index函数之前获取一下时间戳 index() # 调用index函数 end_time = time.time() print('函数的执行时间:end_time - start_time') """ 缺陷 不用形参个数的函数无法兼容统计 解决措施: *args **kwargs 但是在我们目前的代码中无法实现(暂且忽略) """ def funcl(a): time.sleep(1) print('from func1') """ 缺陷 改变了原来的调用方式 解决措施: 装饰器推导流程 """
装饰器各种版本
import time """针对有参无参函数如何兼容""" def outer(xxx): def get_time(*args,**kwargs): start_time = time.time() # 在调用index函数之前获取时间戳 res = xxx(*args,**kwargs) # 调用index函数 end_time = time.time() print('函数的执行时间是:',end_time - start_time) return res return get_time() def home(): time.sleep(2) print('from home') return '执行home函数之后的返回值' def index(name): time.sleep(1) print('from index') return '执行index函数之后的返回值' home = outer(home) xxx = home() print(xxx) index = outer(index) res = index('jason') print(res) home = outer(home) home() def func(a,b,c): time.sleep(1) print('from func') index = outer(index) index('jason') home = outer(home) home() func = outer(func) func(1,2,3)
装饰器的固定模板
from functools import wraps def outer(func_name): @wraps(func_name) # 仅仅是为了让装饰器不容易被别人发现 做到真正的以假乱真 def inner(*args,**kwargs): print('执行被装饰对象之前可以做的额外操作') res = func_name(*args,**kwargs) print('执行被装饰对象之后可以做的额外操作') return res return inner import time def home() time,sleep(1) print('from home') return 'home返回值' home = outer(home) res = home() print(res) """ 执行home函数之前需要添加校验用户身份的功能 """ 装饰器语法糖 import time @outer # home = outer(真正的函数名home) def home(): '''我是home函数 天气很热''' time.sleep(1) print('from home') return 'home返回值' help(home) print(home) home() def index(): '我是index函数 我的功能很强大' pass help(index)
这篇关于闭包函数与装饰器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南
- 2024-12-21功能权限实战:新手入门指南