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

职业教育网站开发沧州市网站

职业教育网站开发,沧州市网站,建站平台 选择,广州站到广州南站地铁要多久本文改编自以下文章:Decorators in Python 装饰器是一个很强大的工具,它允许我们很便捷地修改已有函数或者类的功能,我们可以用装饰器把另一个函数包装起来,扩展一些功能而不需要去修改这个函数代码。 预备知识 在Python中&…

本文改编自以下文章:Decorators in Python


装饰器是一个很强大的工具,它允许我们很便捷地修改已有函数或者类的功能,我们可以用装饰器把另一个函数包装起来,扩展一些功能而不需要去修改这个函数代码。

预备知识

在Python中,函数是第一类对象,也就是说,Python中的函数可以作为参数来使用或传递,它具有如下属性:

  • 可以将函数存储在变量中
  • 可以将函数作为参数传递给另一个函数
  • 可以在函数中 return 另一个函数
  • 可以将函数存储在数据结构中,如哈希表,列表等

【例 1】将函数视为对象

在这里插入图片描述

在上面例子中,我们把函数up赋值给变量up1。这个操作并不会调用函数,而只是给函数up取了个别名up1

【例 2】将函数作为参数传递

在这里插入图片描述
上面例子中,函数dream的参数uplow也是函数

【例 3】从函数中 return 函数

在这里插入图片描述
这边比较绕,注意create_adder(15)返回的是一个函数,这个函数等同于adder,并且其内参数x是15。

最简单的装饰器

这边给出一个装饰器:

在这里插入图片描述

可以看到,装饰器就是把一个函数作为参数传进去,它本身也是个函数,把传进去的函数包装完之后,再把函数传出来。

在这里插入图片描述

我们把装饰器当成函数,正常调用就是上面这样。当然,装饰器有它特殊的用法,比如像这样:

在这里插入图片描述

它的工作逻辑就是把我定义的函数paper1当成参数传递给我的装饰器decorator,再传出来,当然我也可以把装饰器当成函数直接调用,就是麻烦一点罢了。

装饰器的语法逻辑是这样的:

@decorator
def func():print("果壳小旋子")'''Above code is equivalent to -def func():print("果壳小旋子")func = decorator(func)'''

【例 4】计算代码运行时间的装饰器

# importing libraries
import time
import math# decorator to calculate duration
# taken by any function.
def calculate_time(func):# added arguments inside the inner1,# if function takes any arguments,# can be added like this.def inner1(*args, **kwargs):# storing time before function executionbegin = time.time()func(*args, **kwargs)# storing time after function executionend = time.time()print("Total time taken in : ", func.__name__, end - begin)return inner1

在这里插入图片描述

装饰器的作用很明显了,当我需要计算某一个函数的运行时间时,我只要找到那个函数的定义,在前面@calculate_time就行了,不需要再一个一个修改函数,当我不需要计算时间的时候,把装饰器删掉就行了。

被装饰的函数需要传参,有返回值

def hello_decorator(func):def inner1(*args, **kwargs):print("before Execution")# getting the returned valuereturned_value = func(*args, **kwargs)print("after Execution")# returning the value to the original framereturn returned_valuereturn inner1

在这里插入图片描述
上面的装饰器中的内层函数inner1可以接收参数*args, **kwargs,并且可以返回值returned_value*args表示可以接受任意长度的位置参数,**kwargs表示可以接受任意长度的关键字参数。

多个装饰器连用

如果我有多个装饰器来装饰同一个函数,会是什么情况?首先定义两个装饰器:

# code for testing decorator chaining
def decor1(func):def inner():x = func()return x * xreturn innerdef decor(func):def inner():x = func()return 2 * xreturn inner

装饰器decor将函数返回值加倍,装饰器decor1将函数返回值乘方

在这里插入图片描述

等价于

decor1(decor(num))
decor(decor1(num2))
http://www.hyszgw.com/news/77257.html

相关文章:

  • 做推送的网站网站能给企业带来什么
  • 网站怎么做关键词搜索4399小游戏大全网页版
  • dedecms做手机网站网站上的图文介绍怎么做
  • 如何做设计网站页面深圳做网站做公司网站的公司
  • 网站如何换空间沈阳网站推广优化排名公司
  • 手机可以登录国家开发银行网站吗阜阳微商城网站建设
  • 网站返回顶部代码泰安短视频seo
  • 有成功案例的网站深圳品牌策划培训
  • 幼教网站建设分析同城app模板
  • 网站备案号wordpress 下拉框图标
  • 哪些网站可以做邀请函网站排名不稳定
  • 重庆网站建设维护网站设计软件免费下载
  • 响应式高端网站app下载安装安卓版
  • 外贸网站商城建设wordpress标签小工具
  • 用网站做的人工智能桂林漓江旅游
  • 网站建设小白到精通需要知网被罚8760万
  • 做酒店网站设计培训心得体会范文大全1000
  • 文化产业协会网站源码网站的网页声明怎么做
  • 计算机前端开发就业方向阳江网站seo服务
  • 老外做牛排的视频网站大酒店网站源代码
  • 新增备案网站要关闭吗电商网站前端制作分工
  • 国外设计网站app有哪些深圳大型商城网站建设
  • 视频网站怎样做郑州百姓网官网
  • 有哪些网站是做数据展示什么是网站设计与运营
  • 国家工信部网站备案查询系统房产中介网站怎么做
  • 剑阁住房和城乡建设厅网站网站 易用性原则
  • 上海建设官方网站网易那个自己做游戏的网站是什么原因
  • wordpress主题加速插件外贸网站优化哪家好
  • 旅游网站建设的费用明细宁波高新区建设局网站
  • 成都网站建设哪家技术好页面设计优缺点