装饰器
装饰器的概念
就是所有东西组合在一起的就是装饰器。(如闭包函数,名称空间)
装饰器的简易版本
import time def login(): time.sleep(2) print('from login') def func(index): def all_func(): start_time = time.time() index() end_time = time.time() print(end_time - start_time) return all_func res = func(login) res()
装饰器的进阶版本
进阶版本就是解决了函数的传参问题
import time def login(name): time.sleep(2) print('from login', name) def func(index): def all_func(*args, **kwargs): start_time = time.time() index(*args, **kwargs) end_time = time.time() print(end_time - start_time) return all_func res = func(login) res('bxf')
解决函数返回值问题
在每个函数后加上返回值(return后面的),就能解决返回值问题
import time def login(name): time.sleep(2) print('from login', name) # return 'from login' def func(index): def all_func(*args, **kwargs): start_time = time.time() res = index(*args, **kwargs) end_time = time.time() print(end_time - start_time) return res return all_func res = func(login) res1=res('bxf') print(res1)
装饰器的固定模板
def func(*args, **kwargs): print('form func') return 'from func' def index(*args, **kwargs): def index1(): print('调用函数之前运行的代码') res = func(*args,**kwargs) print('调用函数之后运行的代码') return res return index1()
装饰器的语法糖
用@+函数名,就可以直接代替函数传参的形式,直接调用需要使用的函数就可以,此代码必须加在你要用的函数之上。
import time def func(index): def all_func(*args, **kwargs): start_time = time.time() res = index(*args, **kwargs) end_time = time.time() print(end_time - start_time) return res return all_func @func def login(name): time.sleep(2) print('from login', name) # return 'from login' login('bxf')
装饰器的双层语法糖
import time def func(func): def all_func(): start_time = time.time() func() end_time = time.time() print(end_time - start_time) return all_func def login_auth(func): # func = index def auth(): # 1. 让用户输入用户名和密码 username = input('username:').strip() password = input('password:').strip() # 2. 判断用户名和密码 if username == 'ly' and password == '123': func() # inner() else: print('输入错误,不能调用函数') return auth # 一定别忘记把内层函数的函数名返回出去 @login_auth @func def login(): time.sleep(2) print('from login') login()
有参装饰器
import time def index(date): def func(index1): def all_func(): if date == 1: start_time = time.time() index1() end_time = time.time() print(end_time - start_time) elif date == 2: print('这是2') elif date == 3: print('这是3') return all_func return func # date = input('请输入序号:') date = int(input('请输入序号:')) @index(date) def login(): time.sleep(2) print('from login') login()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现