• 装饰器


     一、装饰器的简单介绍

     1 # /usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 '''   装饰器   '''
     4 ''' 5     装饰器的工作原理
     6     1. python的执行顺序是从上到下顺序执行.
     7     2. 当执行到outer函数的时候, 将其内容放入内存, 执行到f1的时候.在f1上发现@outer装饰器.
     8     3. 执行outer函数, 并将其下的函数名f1作为参数传递给outer
     9     4. 将outer的返回值赋值给f1. 即f1=outer的返回值.  也就是f1重新指向outer的返回值
    10     5. outer的返回值inner是函数, 也就是outer返回了一个函数. f1指向outer返回的inner函数.
    11     6. 在后面调用f1(), 即调用inner()执行函数. 执行inner函数的内容.
    12     7. 在inner函数中调用执行了func函数. func=原来的f1函数 , 调用func(),即执行原来的f1函数.返回结果r
    13     8. inner的返回值是r, 新的f1函数的返回值也是r. 因此可以获得返回值, 并打印输出
    14     8. 由于f1函数没有返回值, 默认返回none. 因此后来的f1函数的返回值是None.
    15 '''
    16 
    17 
    18 def outer(func):
    19     def inner():
    20         print("hello")
    21         print( "hello" )
    22         print( "hello" )
    23         r = func()
    24         print("end")
    25         print( "end" )
    26         print( "end" )
    27         return r
    28     return inner
    29 
    30 @outer
    31 def f1():
    32     print("FF1")
    33 
    34 
    35 r = f1()
    36 print(r)

     二、装饰器装饰带两个参数的函数

     1 # /usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 '''装饰器_带有多个参数'''
     4 
     5 #定义装饰器的时候,带有两个参数*args,**kwargs.可以用来接收动态参数.
     6 def outer(func):
     7     def inner(*args, **kwargs):
     8         print("Hello")
     9         r = func(*args, **kwargs)
    10         print("End")
    11         return r
    12     return inner
    13 
    14 @outer
    15 def f1(a,b):
    16     print("执行带参数的函数")
    17     return a+b
    18 
    19 r = f1(1,2)
    20 print(r)

     三、多个装饰器装饰一个函数

     1 # /usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 '''多个装饰器装饰一个函数'''
     4 
     5 def outer(func):
     6     """
     7     装饰器1
     8     :param func:
     9     :return:
    10     """
    11     def inner(*args, **kwargs):
    12         print("begin")
    13         r = func(*args, **kwargs)
    14         print("end")
    15         return r
    16     return inner
    17 
    18 def outer_1(func):
    19     """
    20     装饰器2
    21     :param func:
    22     :return:
    23     """
    24     def inner(*args, **kwargs):
    25         print("predict")
    26         r = func(*args, **kwargs)
    27         return r
    28     return inner
    29 
    30 
    31 
    32 
    33 @outer_1
    34 @outer
    35 def f1(a1, a2, a3):
    36     """
    37     为这个函数使用两个装饰器
    38     :param a1:
    39     :param a2:
    40     :param a3:
    41     :return:
    42     """
    43     print("f1函数")
    44     return a1 + a2 + a3
    45 
    46 f1(1,2,3)
  • 相关阅读:
    剑指 Offer 22. 链表中倒数第k个节点(简单)
    剑指 Offer 18. 删除链表的节点(简单)
    Proxy error: Could not proxy request
    剑指 Offer 63. 股票的最大利润(中等)
    剑指 Offer 47. 礼物的最大价值(中等)
    剑指 Offer 42. 连续子数组的最大和(简单)
    oracle 常用函数之 字符函数
    oracle 常用函数之 日期函数
    oracle 常用函数之聚合函数
    jdbc
  • 原文地址:https://www.cnblogs.com/ITPower/p/7149171.html
Copyright © 2020-2023  润新知