zoukankan      html  css  js  c++  java
  • 23python装饰器的使用

                   函数与方法的装饰器,这些可以实现面向切面的编程,类似于java的spring中的proxy

    #-*-coding:UTF-8-*-
    #修饰器会默认接受一个对象,用来确保运行后将控制权返回给原来的函数,参数是一个function对象
    def dec(func):
        print '我是装饰器'
        return func
    
    
    def dec1(func):
        print 'after'
    
    class demo:
        @dec
        def fun1(self):
            print '我是方法!'
    demo().fun1()


     对参数数量不确定的函数进行装饰

    import pdb
    pdb.set_trace()
    def decorator(func):
    	def before(*args,**kwargs):
    		print 'before!'		
    		func(*args,**kwargs)
    		print 'after!'
    		print args,kwargs
    	return before
    
    @decorator
    def foo(a,b=2):
    	print 'content'
    
    if __name__ == '__main__':
    	foo(1,b=2)


    让装饰器带参数

    import pdb
    pdb.set_trace()
    def decorator(a):
    	def canshu(func):
    		def before(*args,**kwargs):
    			print 'before!'		
    			func(*args,**kwargs)
    			print 'after!'
    			print args,kwargs,a
    		return before
    	return canshu
    @decorator('123')
    def foo(a,b=2):
    	print 'content'
    
    if __name__ == '__main__':
    	foo(1,b=2)


    与前面的不同在于:比上一层多了一层封装,先传递参数,再传递函数名。

    def timer(b,d): #b,d为装饰器的参数
        def m(a):   #a是函数本身
            def t(c): #c是函数的参数
                print c
                print d
                print b
                a('ccc')
            return t
        return m    
    
    @timer("this is the decorator's args",1)
    def test(a):
        print a
        print 'main'
         
    
    test("this is the function's args")
        


     

  • 相关阅读:
    一名中国联络官的来信
    中国女性出席1899年伦敦世界妇女大会
    曾在九江同文任教的中外人士若干
    金韵梅大夫略传
    为何高于四次的方程没有根式解?
    日军进攻九江的影像资料
    美以美会在九江
    九江同文中学与宝洁公司的甘布尔家族
    九江生命活水医院
    微信小程序获取用户信息签名解密C#
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4145120.html
Copyright © 2011-2022 走看看