Python之装饰器

本文深入探讨了Python中装饰器的概念与应用,包括其如何为函数添加额外功能而不修改原函数代码,以及高级函数、函数嵌套和闭包等基础知识。通过实例展示了装饰器在性能监控等场景的应用。

一 什么是装饰器

 

器即函数,

装饰即修饰,意指为其他函数添加功能

装饰器定义:本质就是函数,功能是为其他函数添加新功能

原则:

  • 不修改被修饰函数的源代码
  • 不修改被修饰函数的调用方式

装饰器的基础知识:

  装饰器 = 高阶函数 + 函数嵌套 + 闭包

二 高级函数

高阶函数的定义:

  1. 函数接收的参数是一个函数名
  2. 函数的返回值是一个函数名
  3. 满足上面条件任意一个,都可以称之为高阶函数
 1 import time
 2 def test(fun):
 3     start_t = time.time()
 4     fun()
 5     stop_t = time.time()
 6     print("函数运行时间-->",stop_t - start_t)
 7 
 8 def foo():
 9     time.sleep(2)
10     print("来自foo")
11 test(foo)
12 函数运行时间--> 2.0003068447113037
13 """
14 来自foo
15 函数运行时间--> 2.0003068447113037
16 """
函数的参数是一个函数名
 1 import time
 2 def test(fun):
 3     start_t = time.time()
 4     fun()
 5     stop_t = time.time()
 6     print("函数运行时间-->",stop_t - start_t)
 7     return fun
 8 
 9 def foo():
10     time.sleep(2)
11     print("来自foo")
12 
13 foo = test(foo)
14 foo()
15 
16 """
17 来自foo
18 函数运行时间--> 2.000347137451172
19 """
函数的返回值是一个函数名

高阶函数终结

1,函数接收的参数是一个函数名

  作用:在不修改函数源代码的前提下,为函数增加新功能

  不足:会改变函数的调用方式

2,函数的返回值是一个函数名

  作用:不修改函数的调用方式

  不足:不能增添新功能

三 函数的嵌套

def father(name):
    print("from father %s"%name)
    def son():
        name = "abc"
        print("from son")
        def grandson():
            print("from grandson %s"%name)
        grandson()
    son()

father("123")

四 闭包

在一个作用域里放入定义变量,相当于打了一个包

五 装饰器的基本实现

import time
def test(fun):
    def wrapper(*args, **kwargs):
        start_t = time.time()
        res = fun(*args, **kwargs)
        stop_t = time.time()
        print("函数运行时间-->",stop_t - start_t)
        return res
    return wrapper

@test # foo = test(foo)
def foo(name,age):
    time.sleep(2)
    print("来自foo")
    return "这是test的返回值%s,%s"%(name,age)

print(foo("abc",123))

 六 解压序列

a = 1
b = 2
print(a,b)
a,b = b,a
print(a,b)
"""
1 2
2 1
"""

l = (1,2,3,4,5,6)
a,*b,c = l
print(a,b,c)
"""
1 [2, 3, 4, 5] 6
"""

满足一一对应关系

 

转载于:https://www.cnblogs.com/kaixindexiaocao/p/9757195.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值