装饰器,装饰器多参数的使用(*arg, **kwargs),装饰器的调用顺序

一、#1.执行outer函数,并且将其下面的函数名,当作参数  #2、将outer的返回值重新赋值给f1 = outer的返回值  #3.新f1 = inner  #4.func = 原f1
 1 #!/usr/bin/env python
 2 def outer(func) :
 3     def inner() :
 4         print("hello")
 5         print("hello")
 6         print("hello")
 7         r = func()
 8         print("end")
 9         print("end")
10         print("end")
11         return  r
12     return inner
13 @outer
14 def f1() :
15     print("F1")
16 #1.执行outer函数,并且将其下面的函数名,当作参数
17 #2、将outer的返回值重新赋值给f1 = outer的返回值
18 #3.新f1 = inner
19 f1()

二、装饰器多参数的使用(*arg, **kwargs)

 1 #!/usr/bin/env python
 2 def oute(func) :
 3     """
 4
 5     :param func:
 6     :return:
 7     """
 8     def inner(*arg, **kwargs) :
 9         print("abvc")
10         r = func(*arg, **kwargs)
11         print("456")
12         return r
13     return inner
14 @oute
15 def outer(func) :
16     def inner(*arg, **kwargs) :
17         print("123")
18         r = func(*arg, **kwargs)
19         print("789")
20         return r
21     return inner
22 # @oute
23 @outer
24
25 def f1(a1, a2) :
26     print("321")
27 def f2(a1, a2) :
28     print("dfas")
29 f1(1,2)

结果为:

abvc
456
123
321
789

 1 #!/usr/bin/env python
 2 def oute(func) :
 3     """
 4
 5     :param func:
 6     :return:
 7     """
 8     def inner(*arg, **kwargs) :
 9         print("abvc")
10         r = func(*arg, **kwargs)
11         print("456")
12         return r
13     return inner
14 # @oute
15 def outer(func) :
16     def inner(*arg, **kwargs) :
17         print("123")
18         r = func(*arg, **kwargs)
19         print("789")
20         return r
21     return inner
22 @oute
23 @outer
24
25 def f1(a1, a2) :
26     print("321")
27 def f2(a1, a2) :
28     print("dfas")
29 f1(1,2)

结果为:

abvc
123
321
789
456

 
时间: 2024-12-17 02:27:23

装饰器,装饰器多参数的使用(*arg, **kwargs),装饰器的调用顺序的相关文章

Python装饰器AOP 不定长参数 鸭子类型 重载(三)

1 可变长参数与关键字参数 *args代表任意长度可变参数 **kwargs代表关键字参数 用*args和**kwargs只是为了方便并没有强制使用它们. 缺省参数即是调用该函数时,缺省参数的值若未被传入,则传入默认预设的值. 注意 : 须将所有带有默认值的参数置于参数列表的末尾. def print_info(name, age = 18,gender = True ) print_info("zhan", gender = False ) def demo(num, *nums ,

装饰器,functools,参数注解

装饰器(无参)? 它是一个函数? 函数作为它的形参? 返回值也是一个函数装饰器和高阶函数? 装饰器是高阶函数,但装饰器是对传入函数的功能的装饰(功能增强)带参装饰器? 它是一个函数? 函数作为它的形参? 返回值是一个不带参的装饰器函数? 使用@functionname(参数列表)方式调用? 可以看做在装饰器外层又加了一层函数函数注解? Python 3.5引入? 对函数的参数进行类型注解? 对函数的返回值进行类型注解? 只对函数参数做一个辅助的说明,并不对函数参数进行类型检查? 提供给第三方工具

python装饰器详解,多层装饰器,及带参数的装饰器。

pyhon学习有一段时间了,今天又碰到了Django的中间件,其实Django里面的中间件,就是用了多层的装饰器,然后去了解了一下多层装饰器,感觉有写东西差不多快忘了,也可能前面没学好. 现在重新记录,学习下. 普通装饰器: def warp(func): print('我是装饰器,碰到需要装饰的函数,一开始执行这里') def inner(*args, **kwargs): print('这里才是真正的装饰开始!') res = func(*args, **kwargs) print('装饰结

python 多个装饰器的调用顺序

python 多个装饰器的调用顺序 一般情况下,在函数中可以使用一个装饰器,但是有时也会有两个或两个以上的装饰器.多个装饰器装饰的顺序是从里到外(就近原则),而调用的顺序是从外到里(就远原则). 原代码 执行结果 装饰顺序 : 就近原则 被装饰的函数,组装装饰器时,是从下往上装饰 执行顺序 : 就远原则 装饰器调用时是从上往下调用 为了更好的理解,找到这段话: 被装饰的函数是一个妹子,装饰器是衣服."办事情"的时候得依次把外套.衬衣.内衣脱掉,事情办完了还要依次把内衣.衬衣.外套穿上.

Scala正则和抽取器:解析方法参数

在<正则表达式基础知识>中概括了正则表达式的基础知识, 本文讲解如何使用正则表达式解析方法参数,从而可以根据 DAO 自动生成 Service. 在做 Java 项目时,常常要根据 DAO 生成 Service , 而 Service 有时是简单的调用 DAO 方法.比如根据 public CreativeDO findByCreativeId(Long creativeId)  生成如下代码: public CreativeDO findByCreativeId(Long creativeI

html视频播放器的代码 及其参数详解

播放视频最实用的一段代码是:程序代码<object classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="500" height="400"><param name="autostart" value="0" /><param name="url" value="视频地址.wmv&q

JVM实用参数(六) 吞吐量收集器

JVM实用参数(六) 吞吐量收集器 原文链接 本文连接 译者:张军  校对:梁海舰 在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准: 吞吐量越高算法越好 暂停时间越短算法越好 首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(throughput)和暂停时间(pause times). JVM在专门的线程(GC threads)中执行GC. 只要GC线程是活动的,它们将与应用程序线程(application threads)争用当前可用CPU的时钟周期

垃圾收集器与内存分配策略之篇二:垃圾收集器

五.垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.由于java虚拟机规范对垃圾收集器实现没有任何的规范因此不同的厂商,不同的版本的虚拟机所提供的垃圾收集器都有可能会有很大的区别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器. 虚拟机中所包含的垃圾收集器如下图: 连线代代表他们可以组合使用.下面分别对以上垃圾收集器进行说明: 01)Serial 是历史悠久的收集器,在垃圾回收期间或中断用户线程,是一个单线程的收集器,在进行垃圾

jqm视频播放器,html5视频播放器,html5音乐播放器,html5播放器,video开发demo,html5视频播放示例,html5手机视频播放器

最近在论坛中看到了很多实用html5开发视频播放,音乐播放的功能,大部分都在寻找答案.因此我就在这里做一个demo,供大家相互学习.html5开发越来越流行了,而对于视频这一块也是必不可少的一部分.如何让你的网站占据优势,就要看你的功能和用户体验了.html5对video还是做了很多优惠的东西,我们使用起来很得心应手. 在过去 flash 是网页上最好的解决视频的方法,截至到目前还算是主流,像那些优酷之类的视频网站.虾米那样的在线音乐网站,仍然使用 flash 来提供播放服务.但是这种状况将会随