装饰器
发布日期: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)

 

上一篇:正则表达式
下一篇:内置函数 -- bytes -- 字节码与字符串相互转换

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年05月10日 12时35分41秒