news 2026/10/5 2:30:00

装饰器decorator总结(函数即是变量、高阶函数、嵌套函数、参数组)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
装饰器decorator总结(函数即是变量、高阶函数、嵌套函数、参数组)

装饰器

  1. decorator的本质他就是函数
  2. 原则:–对于被装饰的函数他不发生任何变化,他是透明的。
    • 不能修改被装饰的函数的源代码
    • 不能修改被装饰的函数的调用方式
  3. 函数就是”变量“:
    • 普通变量。先定义后使用:如x=1,先定义变量x和再调用变量;函数也如此,先定义函数在调用函数;
#第一步:定义deffibo(x):ifx==0:return1elifx==1:return1else:returnfibo(x-1)+fibo(x-2)#第二步:调用print(fibo(10))
  • 存储也是一样,函数名以及函数体存储:普通变量x为名牌号,1为值存储在内存中,函数则函数名为名牌号,函数体存储在内存中
  • 匿名函数:特殊的匿名函数没有函数名,用完即回收:lambda x :print(x)
  1. 高阶函数;如def test(x,y,func)
    • 把一个函数当做参数传参给另外一个函数
    • 返回值包含函数名
defsum(a,b,c):returna+b+c#sum是函数名,为传参deffun(a,b,c,sum):print("count:")returnsum(a,b,c)#返回值sum函数名print(fun(1,2,3,sum))
  1. 函数嵌套:定义函数时函数中包含另外一个函数。
deffoo():print('in the foo')defbar():#函数foo中的函数print('in the bar')bar()foo()
  1. 装饰器=高阶函数+嵌套函数
defdecorator(func):#func_test01传值给func 高阶函数defwrapper(*args,**kwargs):#嵌套函数 参数组start_time=time.time()func(*args,**kwargs)#调用func_test01 参数组stop_time=time.time()print("the fun runtime is {}".format(stop_time-start_time))returnwrapper#返回这个函数的内存地址@decorator#func_test01=decorator(func_testo1)deffun_test01():#原函数的源代码不变time.sleep(1)print('in fun_test01')fun_test01()#函数调用方式不变
  1. 带参数组的装饰器:三层嵌套
importtime user_name="agan"password="123"defauth(auth_type):defouter_wrapper(func):print("you auth_type is {}".format(auth_type))defwrapper(*args,**kwargs):print('wrapper func args:',*args,**kwargs)ifauth_type=='local':uname=input("Please input your username: ").strip()#去掉字符串开头和结尾的空白字符psd=input("Please input your password: ").strip()ifuname==user_nameandpsd==password:print("you have authenticated!")res=func(*args,**kwargs)# 调用funcreturnreselse:print("wrong username or password!")else:print("wrong auth type!")returnwrapperreturnouter_wrapperdefindex():print("welcome to index page")@auth(auth_type="local")# home = outer_wrapperdefhome():print("welcome to home page")index()home()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 2:29:51

第068篇 sealed class:状态建模的利器

sealed class 在 Kotlin 里的地位,相当于"用类型系统表达状态机"。它的价值不在语法,而在一个很实际的痛点:当一个值有多种可能形态时,怎么保证"处理了这几种形态"这件事不会漏。 面试里问 sealed class,问的往往不是"是什么",而是"你…

作者头像 李华
网站建设 2026/10/5 2:28:57

Android 自定义 View 从零到实战:手写 6 大高频组件,附绘制异常排查清单

摘要:从零手写 Android 自定义 View 的实战指南。深入拆解 Measure、Layout、Draw 三大核心步骤,带你完成月份选择器、防滚动列表、动态饼图、广告轮播等 6 个高频组件,并附赠绘制异常排查清单。全程代码可复制、可直接落地。 目录 ① 视图构建核心三步骤解析 1.1 onMeasure…

作者头像 李华
网站建设 2026/10/5 2:28:57

Python实战第14期:常用标准库

文章目录 引言:为什么需要标准库? 一、os模块 1. 导入os模块 2. 获取当前工作目录 3. 切换目录 4. 列出目录内容 5. 创建目录 6. 删除目录 7. 删除文件 8. 重命名文件或目录 9. 路径操作 10. 遍历目录树 11. 环境变量 12. 执行系统命令 二、datetime模块 1. 导入datetime模块…

作者头像 李华
网站建设 2026/10/5 2:28:28

Linux 权限别死记!一文搞懂 rwx、数字权限、目录权限坑点

这几天是国庆我久违的睡了一个大觉 目录 一、 root与普通用户的区分 二、Linux的权限管理 2.1 三种基本权限 2.2 权限的两种表示法:符号和数字 三、权限的修改与验证 四、三个关于权限的问题 4.1 进入一个目录需要哪些权限 4.2 读文件需要什么权限 4.3 写入…

作者头像 李华