
装饰器
发布日期:2021-05-08 23:41:54
浏览次数:22
分类:博客文章
本文共 2093 字,大约阅读时间需要 6 分钟。
一、装饰器的简单介绍
1 # /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 ''' 装饰器 ''' 4 ''' 5 装饰器的工作原理 6 1. python的执行顺序是从上到下顺序执行. 7 2. 当执行到outer函数的时候, 将其内容放入内存, 执行到f1的时候.在f1上发现@outer装饰器. 8 3. 执行outer函数, 并将其下的函数名f1作为参数传递给outer 9 4. 将outer的返回值赋值给f1. 即f1=outer的返回值. 也就是f1重新指向outer的返回值10 5. outer的返回值inner是函数, 也就是outer返回了一个函数. f1指向outer返回的inner函数.11 6. 在后面调用f1(), 即调用inner()执行函数. 执行inner函数的内容.12 7. 在inner函数中调用执行了func函数. func=原来的f1函数 , 调用func(),即执行原来的f1函数.返回结果r13 8. inner的返回值是r, 新的f1函数的返回值也是r. 因此可以获得返回值, 并打印输出14 8. 由于f1函数没有返回值, 默认返回none. 因此后来的f1函数的返回值是None.15 '''16 17 18 def outer(func):19 def inner():20 print("hello")21 print( "hello" )22 print( "hello" )23 r = func()24 print("end")25 print( "end" )26 print( "end" )27 return r28 return inner29 30 @outer31 def f1():32 print("FF1")33 34 35 r = f1()36 print(r)
二、装饰器装饰带两个参数的函数
1 # /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 '''装饰器_带有多个参数''' 4 5 #定义装饰器的时候,带有两个参数*args,**kwargs.可以用来接收动态参数. 6 def outer(func): 7 def inner(*args, **kwargs): 8 print("Hello") 9 r = func(*args, **kwargs)10 print("End")11 return r12 return inner13 14 @outer15 def f1(a,b):16 print("执行带参数的函数")17 return a+b18 19 r = f1(1,2)20 print(r)
三、多个装饰器装饰一个函数
1 # /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 '''多个装饰器装饰一个函数''' 4 5 def outer(func): 6 """ 7 装饰器1 8 :param func: 9 :return:10 """11 def inner(*args, **kwargs):12 print("begin")13 r = func(*args, **kwargs)14 print("end")15 return r16 return inner17 18 def outer_1(func):19 """20 装饰器221 :param func:22 :return:23 """24 def inner(*args, **kwargs):25 print("predict")26 r = func(*args, **kwargs)27 return r28 return inner29 30 31 32 33 @outer_134 @outer35 def f1(a1, a2, a3):36 """37 为这个函数使用两个装饰器38 :param a1:39 :param a2:40 :param a3:41 :return:42 """43 print("f1函数")44 return a1 + a2 + a345 46 f1(1,2,3)
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年05月10日 12时35分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
形状类似小于等于号的符号是啥
2019-03-15
遇到问题之-yum update无法连接镜像问题解决
2019-03-15
遇到问题之-httpd服务启动报错182行错误
2019-03-15
pycharm如何设置(错误、警告类的标准提醒)
2019-03-15
PHP是世界上最好的语言?Phython第一个不服
2019-03-15
Bugku CTF-web6
2019-03-15
Bugku CTF-web10 头等舱
2019-03-15
UML-配置图
2019-03-15
JS高级面向对象(二)-构造函数和原型
2019-03-15
python入门到秃顶(10):异常
2019-03-15
ES6_变量生明
2019-03-15
考研复试英语问答
2019-03-15
百度背景换肤案例
2019-03-15
修改ng-zorro中table对齐及宽度等细节
2019-03-15
输出对象的值——踩坑
2019-03-15
angular2项目里使用排他思想
2019-03-15
折线图上放面积并隐藏XY轴的线
2019-03-15
Experience of tecent interview
2019-03-15
failed to push some refs to git
2019-03-15