zoukankan      html  css  js  c++  java
  • python 装饰器

    一、无参数,无返回值的装饰器

     1 def check(func):
     2     def inner():
     3         print('def')
     4         func()
     5     return inner
     6 
     7 @check    #foo = check(foo)
     8 def foo():
     9     print('abc')
    10    
    11 foo()

    二、2个装饰器

     1 # -*- coding:utf-8 -*-
     2 
     3 def check(func):
     4     def inner():
     5         print('def')
     6         func()
     7     return inner
     8 
     9 def check1(func):
    10     def inner():
    11         print('ghk')
    12         func()
    13     return inner
    14 
    15 @check    #foo = check(foo)   后装饰,先执行
    16 @check1   #foo = check1(foo)  先装饰,后执行
    17 def foo():
    18     print('abc')
    19 
    20 foo()

    结果:

    1 def
    2 ghk
    3 abc

    三、带参数,无返回值函数的装饰器

     1 # -*- coding:utf-8 -*-
     2 
     3 def check(func):
     4     def inner(arg):
     5         print('def')
     6         func(arg)
     7     return inner
     8 
     9 @check    #foo = check(foo)
    10 def foo(arg):
    11     print('abc%s' % arg)
    12 
    13 foo('d')

    四、带参数,带返回值函数的装饰器

     1 # -*- coding:utf-8 -*-
     2 
     3 def check(func):
     4     def inner(arg):
     5         print('def')
     6         ret = func(arg)
     7         print('ghk')
     8         return ret
     9     return inner
    10 
    11 @check    #foo = check(foo)
    12 def foo(arg):
    13     print('abc%s' % arg)
    14     return 'ok'
    15 
    16 ret = foo('d')
    17 print(ret)

    五、通用的装饰器

     1 # -*- coding:utf-8 -*-
     2 
     3 def check(func):
     4     def inner(*args, **kwargs):
     5         print('...')
     6         ret = func(*args, **kwargs)
     7         print('---')
     8         return ret
     9     return inner
    10 
    11 @check    #foo = check(foo)
    12 def foo(arg):
    13     print('abc%s' % arg)
    14     return 'ok'
    15 
    16 ret = foo('d')
    17 print(ret)

    六、装饰器带参数

     1 # -*- coding:utf-8 -*-
     2 
     3 def outter(arg):
     4     def check(func):
     5         def inner(*args, **kwargs):
     6             print(arg)
     7             print('...')
     8             ret = func(*args, **kwargs)
     9             print('---')
    10             return ret
    11         return inner
    12     return check
    13 
    14 @outter('e')    #先执行outter('e'),再装饰foo = check(foo)
    15 def foo(arg):
    16     print('abc%s' % arg)
    17     return 'ok'
    18 
    19 ret = foo('d')
    20 print(ret)

    结果:

    1 e
    2 ...
    3 abcd
    4 ---
    5 ok
  • 相关阅读:
    lua中for循环
    调试经验
    vim中如何替换
    ~=
    size函数
    ubuntu截屏
    linux下报错处理经验
    error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
    《JavaScript》——DOM
    iOS_截屏并裁剪
  • 原文地址:https://www.cnblogs.com/gundan/p/8150919.html
Copyright © 2011-2022 走看看