当前位置: 首页 > news >正文

网站 优化 件国内常见的博客网站

网站 优化 件,国内常见的博客网站,商丘58同城招聘网最新招聘,阿里云9元做网站目录 一、装饰器的本质与定义 二、装饰器的雏形与语法糖 1. 装饰器的雏形 2. 装饰器的语法糖 三、装饰器的常见应用 1. 获取程序的执行时间 2. 处理带参数的函数 3. 处理有返回值的函数 四、通用版本的装饰器 五、装饰器的高级用法 1. 给装饰器传递参数 六、总结 在…

目录

一、装饰器的本质与定义

二、装饰器的雏形与语法糖

1. 装饰器的雏形

2. 装饰器的语法糖

三、装饰器的常见应用

1. 获取程序的执行时间

2. 处理带参数的函数

3. 处理有返回值的函数

四、通用版本的装饰器

五、装饰器的高级用法

1. 给装饰器传递参数

六、总结


在 Python 的进阶特性中,装饰器无疑是一颗璀璨的明珠。它能够在不改变函数源代码和调用方式的前提下,为函数增添新的功能,是代码复用和功能扩展的绝佳方案。

一、装饰器的本质与定义

装饰器的本质是一个闭包函数,这意味着它满足闭包的三个构成条件:有嵌套、有引用、有返回(返回的是函数的内存地址)。简单来说,装饰器就是这样一种工具:在不改变现有函数源代码以及函数调用方式的前提下,实现给函数增加额外的功能。

二、装饰器的雏形与语法糖

1. 装饰器的雏形

最初的装饰器实现,需要手动将被装饰的函数传入装饰器函数,并重新赋值。例如,要给评论和下载功能添加登录验证,可这样实现:

def check(fun):def inner():print('登录功能')fun()return innerdef comment():print('评论功能')
comment = check(comment)
comment()def download():print('下载功能')
download = check(download)
download()

这里的check函数就是一个装饰器雏形,它接收要装饰的函数fun作为参数,内部嵌套的inner函数实现了额外的登录功能,并调用了原函数fun,最后返回inner函数。

2. 装饰器的语法糖

为了简化装饰器的使用,Python 提供了@语法糖。使用@装饰器的形式,可直接将装饰器应用于函数,无需手动赋值。例如:

def check(fun):def inner():print('验证登录')fun()return inner@check
def comment():print('发表评论')
comment()

此时,调用comment(),实际上是调用了装饰器内部的inner函数,先执行登录验证,再执行原函数的功能。

三、装饰器的常见应用

1. 获取程序的执行时间

装饰器可以轻松实现获取函数执行时间的功能。通过在函数执行前后记录时间戳,计算差值即可得到执行时间:

import time
def get_time(fun):def inner():begin = time.time()fun()end = time.time()print(f'这个函数的执行时间:{end - begin}')return inner@get_time
def demo():for i in range(1000000):print(i)
demo()

当调用demo()时,会自动计算并打印该函数的执行时间。

2. 处理带参数的函数

对于带有参数的函数,装饰器的内部函数可以使用*args和**kwargs来接收不定长参数,确保原函数的参数能正确传递:

def logging(fun):def inner(*args, **kwargs):print('-- 日志信息:正在努力计算机 --')fun(*args, **kwargs)return inner@logging
def sum_num(*args, **kwargs):result = 0for i in args:result += ifor i in kwargs.values():result += iprint(result)print(sum_num())

这样,sum_num函数可以接收任意数量的位置参数和关键字参数,装饰器也能正常工作。

3. 处理有返回值的函数

如果被装饰的函数有返回值,装饰器的内部函数需要将原函数的返回值返回,以保证函数功能的完整性:

def logging(fun):def inner(*args, **kwargs):print('-- 日志信息:正在努力计算 --')return fun(*args, **kwargs)return inner@logging
def sub_num(a, b):result = a - breturn resultprint(sub_num(20, 10))

调用sub_num(20,10)时,装饰器会返回原函数的计算结果。

四、通用版本的装饰器

综合考虑参数和返回值的情况,通用版本的装饰器应具备以下特点:有嵌套、有引用、有返回、有不定长参数、有 return 返回值。其代码示例如下:

def logging(fn):def inner(*args, **kwargs):print('-- 正在努力计算 --')return fn(*args, **kwargs)return inner@logging
def sum_num1(a, b):result = a + breturn result@logging
def sum_num2(a, b, c):result = a + b + creturn result

这个通用装饰器可以适用于各种类型的函数,无论是带参数还是有返回值的情况。

五、装饰器的高级用法

1. 给装饰器传递参数

通过在装饰器外侧再添加一个函数,专门用于接收参数,可以实现根据传递的参数不同,让装饰器表现出不同的功能。例如:

def logging(flag):def decorator(fun):def inner(*args, **kwargs):if flag == '+':print('-- 日志信息:正在努力进行加法运算 --')elif flag == '-':print('-- 日志信息:正在努力进行减法运算 --')return fun(*args, **kwargs)return innerreturn decorator@logging('+')
def sum_num(a, b):result = a + breturn resultprint(sum_num(2, 3))@logging('-')
def sub_num(a, b):result = a - breturn resultprint(sub_num(5, 2))

这里的logging函数接收参数flag,根据flag的值,装饰器会打印不同的日志信息。

六、总结

装饰器是 Python 中一种非常强大且优雅的特性,它基于闭包实现,能够在不改变原有函数的情况下为其增添功能。从简单的功能扩展到复杂的参数传递和类实现,装饰器展现出了极大的灵活性和实用性。掌握装饰器的使用,能够让我们的代码更加简洁、高效和可维护。

http://www.dtcms.com/a/497859.html

相关文章:

  • 建设网站公司做淘宝客注册网站好做吗
  • 宁波网站建设方案报价永久免费域名
  • 官方网站哪家做的最好国内外免费开源cms
  • 阿里云的网站建设花钱么榆林建设银行的网站
  • 网站建设需要步骤网站开发规划书怎么写
  • 品牌企业建站购物帮做特惠的导购网站
  • 天津网站建设优化陕西响应式网站建设公司
  • 网站怎么修改好之后再上线建设银行人力资源系统网站首页
  • 庄河市城乡规划建设局网站小程序网址链接提取
  • seo研究中心vip课程网站建设优化服务好么
  • 怎么做点击文字进入的网站毕业设计做网站好的想法
  • 网站地图用法php 行业网站
  • 建立自己的网站平台wordpress做企业网站
  • 龙采网站建设资源分享平台国产oa系统有哪些
  • 潍坊网站制作建设wordpress响应式博客主题
  • 网站页面划分做网站的客户多吗
  • 网站搭建的步骤博敏网站建设
  • 做环评工作的常用网站网站右下角浮动效果如何做
  • 网站链接如何做二维码网站开发工资高嘛
  • 哔哩网站开发需求分析模板百度有网站建设吗
  • 网站推广软件哪个好如何优化搜索引擎的搜索功能
  • 云服务器拿来做网站你知道的在线视频观看的
  • 网站开发需要的技术人才课程网站建设发展趋势
  • 湖南岳阳网站建设公司黄页顺企网宁波网页设计联系方式
  • 如何搭建公司内部网站网站生成软件免费制作
  • 有公司如何制作网站莆田市网站建设
  • 阿里巴巴网站图片如何做白wordpress 文章在数据库
  • 做跨境电商在什么网站选品手机网站公司
  • 网站建设好后怎么更新内容深圳做网站公司有哪些
  • 自学搭建网站越秀微网站建设