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
  • 相关阅读:
    yarn 国内加速,修改镜像源
    Gradle Wrapper 介绍
    使用 Gradle 快速创建 Java 项目
    Gradle 安装
    gradle 国内加速,修改镜像源
    maven 国内加速,修改镜像源
    java如何对map进行排序详解(map集合的使用)
    Java8 Collections.sort()及Arrays.sort()中Lambda表达式及增强版Comparator的使用
    给定字符串正整数,进行排序并返回排序后字符串
    Linux学习118 nginx与php结合实现web网站及优化
  • 原文地址:https://www.cnblogs.com/gundan/p/8150919.html
Copyright © 2011-2022 走看看