python函数详解__装饰器011

1、什么样的函数称为闭包函数?

主要满足两点:函数内部定义了函数,引用了外部变量但非全局变量

2、python装饰器用于扩展原来函数功能的一种函数

3、装饰器的作用:它可以让被装饰的函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象

(函数的指针)

装饰器的外部函数传入我要装饰的函数名字,返回经过修饰后函数的名字;内层函数(闭包)负责修饰被装饰的函数。从上面记住几点属性,以后便于后面更好的理解:

                     实质:是一个函数

                     参数:是你要被装饰的函数名(并非调用函数)

                     返回:是装饰完的函数名(也非调用函数)

                     作用:为已经存在的对象添加额外的功能

                     特点:不需要对对象代码做任何代码上的变动

import time
def func():
    time.sleep(0.01)
    print('代码运行时长:装饰器')

def timmer(f):  # 装饰器函数
    def inner():
        start = time.time()
        f() # 被装饰器的函数
        end = time.time()
        print(end-start)
    return inner

func = timmer(func)
func()
# 代码运行时长:装饰器
# 0.01500082015991211

4、python装饰器有很多经典的应用场景,比如:插入日志的性能测试、事务处理、权限校验等。

装饰器是解决这类问题的绝佳设计。

5、函数原则:开放封闭原则

(1)开放:对扩展是开放的

(2)封闭:对修改是封闭的

6、语法糖

import time
def timmer(f):  # 装饰器函数
    def inner():
        start = time.time()
        ret = f()  # 被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner

@timmer  # @装饰器的函数名
def func():
    time.sleep(0.01)
    print('被装饰的函数')
    return '装饰器'

print(func())

8、装饰器的固定模式

# 例子
import time
def timmer(f):  # 装饰器函数
    def inner(*args,**kwargs):
        """被装饰的函数执行前增加的功能"""
        ret = f(*args,**kwargs)  # 被装饰的函数
        """被装饰的函数执行后增加的功能"""
        return ret
    return inner

@timmer  # @装饰器名
def func(a,b):  # 被装饰的函数
    time.sleep(0.01)
    print('被装饰器函数 ')
    return '装饰器'

func = timmer(func)  # 演变原理
print(func(1,2))

9、复习装饰器:

(1)开发原则:开放封闭原则(即只可扩展功能,不可修改函数)

(2)装饰器的作用:在不改变原函数调用方式的情况下,在函数的前后添加功能

(3)装饰器的本质:闭包函数

import time
def wapper(f):
    def inner(*args,**kwargs):
        """调用被装饰的函数执行前添加的功能"""
        ret = f(*args,**kwargs)
        """调用被装饰的函数执行后添加的功能"""
        return ret
    return inner

@wapper  # @wapper就是holiday = wapper(holiday)
def holiday(day):
    print('全天放假%s天'%day)
    return '好开心!'
ret = holiday(3)
print(ret)

如果想要在函数内定义全局作用域,需要加上global修饰符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值