python3学习之装饰器

#定义装饰器,outer参数是函数,返回也是函数
#作用:在函数执行前和执行后分别附加额外功能
def  outer(func):
    def  inner(*args, **kwargs):
        print("log")
        func(*args, **kwargs)
        print("Don‘t back")
        # return "r"
    return inner
@outer
def  f1(a):
    print(a,"F1")
@outer
def  f2(a,b):
    print("F2",a,b)
f1(123)
f2(123,456)

#带参数的装饰器,在outer外边又包装了一层
def oo(arg):
    print("hihihihi")    #此处的代码,在装饰器被调用时就被执行,不需要等被装饰的函数被调用
    def  outer(func):
        def  inner(*args, **kwargs):
            print(arg)
            print("log")
            func(*args, **kwargs)
            print("Don‘t back")
            print(arg)
            # return "r"
        return inner
    return outer
def  tt(func):
    def  inner(*args, **kwargs):
        # print(arg)
        print("aaaaa")
        func(*args, **kwargs)
        print("ttttt")
        # print(arg)
        # return "r"
    return inner
    
@tt
@oo(123333)   #可以多层装饰,规则是:从上到下执行装饰器
def  f1(a):
    print(a,"F1")

@oo(11111)
def  f2(a,b):
    print("F2",a,b)

#f1(123)
#f2(123,456)

结果:

hihihihi
hihihihi
时间: 2024-10-12 18:50:50

python3学习之装饰器的相关文章

六、PYTHON 学习之装饰器使用

Python是一种强大的语言,即可浅尝辄止,也可深入挖掘.很适合做科学计算.数据挖掘等等.今天我将简单介绍一下Python的装饰器(Decorators)的用法 . 假设我们想要庆祝下生日,需要邀请一些朋友过来参加.但是你有个讨厌的朋友,叫Joe,必须不能让他来啊.可能首先你想到的是建一个list,然后迭代查找并移除所有的Joe童鞋.这当然是个好方法,但是这里为了介绍装饰器,我们会用@来完成这个工作.虽然可能看起来没有什么必要,但是有助于大家学习装饰器的用法. 首先创建一个Python文件app

【转】九步学习python装饰器

本篇日志来自:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 纯转,只字未改.只是为了学习一下装饰器.其实现在也是没有太看明白,对于装饰器我就是用的时候找例子,能蒙对,但是用过之后一段时间就忘了.还是用的少.有空应该好好看一看的,包括闭包.对于各种现代编程语言来说闭包都是很重要的.在这里先谢过原作者,如有侵权请告知. =-=-=-=-=-=-=-=-=-=-一条不怎么华丽的分隔线-=-=-=-=-=-=-=-=-=-= 这

python3 如何给装饰器传递参数

[引子] 之前写过一篇文章用来讲解装饰器(https://www.cnblogs.com/JiangLe/p/9309330.html) .那篇文章的定位是入门级的 所以也就没有讲过多的高级主题,决定在这里讲一下如果为装饰器传递参数 [目标] 我们有两个函数"add_fun"."add" 其中"add_fun"已经过时.如果用户有调用这个函数的话就提示它"add_fun"已经过时并且引导 它去调用"add"

学习Python装饰器,看这一篇文章就够了

讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切. 谈装饰器前,还要先要明白一件事,Python 中的函数和 Java.C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数,例如: 先来看一个简单例子,虽然实际代码可能比这复杂很多: 说到这里.顺便提醒下大家不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你缺新项目练习或者没有python精讲教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的

python学习笔记--装饰器

1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来不这么单调: def showInfo(fun): def wrap(x,y): print "The function before" func(x,y) print "The function after" return wrap def f(x,y): print

Python学习之装饰器

装饰器出现的原因是因为我们应对新的需求:在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能:它的本质是闭包函数. 装饰器的结构: def timmer(func): def inner(*args,**kwargs): '''添加函数调用之前的扩展代码''' ret = func(*args,**kwargs) '''添加函数调用之后的扩展代码''' return ret return inner 两个def 两个return互相对应. 装饰器的设计模式:是开放封闭原则:既对扩展是开放的

Python学习之装饰器进阶

函数知识回顾: 函数的参数分为:实参和形参. 实参:调用函数的时候传入的参数: 形参:分为3种(位置参数.默认参数.动态传参) 位置参数:必须传值 def aaa(a,b): print(a,b) aaa(1,2) 默认参数:不是必须传参数 def bbb(x=10): print(x) # bbb() #x = 10 # bbb(20) #x = 20 动态传参 def ccc(*args):#1,2,3,4,5 print(args) ccc(1,2,3,4,5)#按位置传参数 t = (1

Python 学习笔记 - 装饰器

这一节了解了一些装饰器的简单使用. 首先来看一个预备知识,把一个函数当做参数,传入另外一个函数 比如说我传递outer(f1),我传入的是f1的内存地址,a=func()其实执行了f1()这个函数,并把返回值赋给了a,因此当我打印print(a),他会输出hee >>> def outer(func):     print(func)     a=func()     print(a) def f1():     print("aaa")     return &qu

十、PYTHON 学习之装饰器加深理解

在第六章已经有所介绍,这里看到一篇比较好的文章转过来. 基本概念 装饰器是23z种设计模式之一,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理, Web权限校验, Cache等. 很有名的例子来理解,咖啡,加糖的咖啡,加牛奶的咖啡. 本质上,还是咖啡,只是在原有的东西上,做了"装饰",使之附加一些功能或特性. 例如记录日志,需要对某些函数进行记录 笨的办法,每个函数加入代码,如果代码变了,就悲催了 装饰器的办法,定义一个专门日志记录的装饰器,对需要的函数进行装饰.