装饰器概念及运用

#!/user/bin/env python3
# -*-encoding="utf-8"-*-
# 1.装饰器概念
#装饰器本身就是函数,为别的函数添加附加功能。把握两个遵循的条件。
# 1.不修改被修饰的源代码内容。
# 2.不修改被修饰函数的调用方式。
# 装饰器=高阶函数+函数嵌套+闭包
# 高阶函数定义:
# 1.函数接收的参数是一个函数名
# 2.函数的返回值是一个函数名
# 3.满足上述条件任意一个,都可称之为高阶函数
#把函数当做参数传给高阶函数:
# def foo():
# print("我的函数名是做为一个高阶函数传给其它的函数的")
# def fc1(fucn):
# print("我是函数fc1,接受函数%s传过来的值" %fucn)
# fucn()
# def fc2(fucn):
# print("我是函数fc2,函数返回值是%s" %fucn)
# return fucn
# fc1(foo)
# fc2(foo)
# import time
# def foo():
# time.sleep(0.2)
# print("参数来自foo")
# def fc1(fucn):
# ks_time=time.time()
# fucn()
# js_time=time.time()
# print("函数%s运行的时间是%s" %(fucn,js_time-ks_time))
# fc1(foo)
# import time
# def foo():
# print('from the foo')
#
# def timmer(func):
# start_time=time.time()
# return func
# stop_time=time.time()
# print('函数%s 运行时间是%s' %(func,stop_time-start_time))
# foo=timmer(foo)
# foo()
# 高阶函数总结
# 1.函数接收的参数是一个函数名
#   作用:在不修改函数源代码的前提下,为函数添加新功能,
#   不足:会改变函数的调用方式
# 2.函数的返回值是一个函数名
#   作用:不修改函数的调用方式
#   不足:不能添加新功能
# 函数嵌套的例子:
# def father(name):
# print('from father %s' %name)
# def son():
# print('from son')
# def grandson():
# print('from grandson')
# grandson()
# son()
# print(father('xfz'))
#一层套一层的最里面的函数形成的就是一个闭包。
# 3.装饰器的框架
# import time
# def zsq(func):
# def gongnenghanshu():
# ks_time=time.time()
# func()
# js_time=time.time()
# print("函数运行的时间是:%s" %(js_time-ks_time))
# return gongnenghanshu
# # 例子:
# @zsq
# def foo():
# time.sleep(3)
# print("运行了函数foo")
# res=zsq(foo) #这是间接方式实现的装饰,但是更改了函数的调用方式.@语法甜糖,加到要调用装饰器的前面
# res()
# foo()
#4.加返回值的方法 例2
import time
def zsq(func):
def gongnenghanshu():
ks_time=time.time()
res=func()
js_time=time.time()
print("函数运行的时间是:%s" %(js_time-ks_time))
return res
return gongnenghanshu
# 例子:
@zsq
def foo():
time.sleep(1)
print("运行了函数foo")
return "我是要添加的函数返回值"
z=foo()
print(z)

转载于:https://www.cnblogs.com/Centwei/p/10466385.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020-3-17

题目一&#xff1a; JavaScript 获取倒数第二个li元素 如何利用JavaScript获取li元素集合中的倒数第二个元素。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <style type"text/css"> #box{list-style:none;font-…

java.lang.UnsupportedOperationException 异常分析

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 今天将一个数组转换成 List 然后进行 remove 操作时却抛出 java.lang.UnsupportedOperationException 异常。 String pattern " ^,…

『并发包入坑指北』之阻塞队列

前言 较长一段时间以来我都发现不少开发者对 jdk 中的 J.U.C&#xff08;java.util.concurrent&#xff09;也就是 Java 并发包的使用甚少&#xff0c;更别谈对它的理解了&#xff1b;但这却也是我们进阶的必备关卡。 之前或多或少也分享过相关内容&#xff0c;但都不成体系&am…

个人理财有哪些基本原理和方法?

现金为王&#xff1a;不超额消费&#xff0c;不使用信用卡&#xff0c;不负债&#xff08;房贷除外&#xff09; 信贷消费已经成为主流的今天&#xff0c;强调使用现金似乎与时代格格不入。而对于信贷消费的依赖&#xff0c;常常来自于下面几个看起来十分有力的观点&#xff…

2019年3月4日 701. Insert into a Binary Search Tree

比较基础的二叉树排序树插入&#xff0c;写了个递归。# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val x # self.left None # self.right Noneclass Solution(object):def insertIntoBST…

2020-3-18

题目一&#xff1a; JavaScript 字符串转换为数组 其一&#xff1a; let str"apple"; console.log([...str]);运行结果 其二&#xff08;使用split()&#xff09;&#xff1a; let str"apple"; console.log(str.split());注1&#xff1a;如果将参数省略…

思维导图,流程图模板整合

思维导图与流程图在工作中都是经常使用的&#xff0c;出现频率较高的&#xff0c;有些不会绘制的或者是刚接触这一类的图表形式的都会选择使用模板来完成工作&#xff0c;但是很多朋友却不知道模板在&#xff0c;今天要给大家分享的是几款孩子走精美的思维导图&#xff0c;流程…

解决 List 执行 remove 时报异常 java.lang.UnsupportedOperationException

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、情况描述 报错如题&#xff1a; java.lang.UnsupportedOperationException: nullat java.util.Collections$UnmodifiableCollectio…

2020-3-19

题目一&#xff1a; js split() 分割字符串生成数组 let str"I am a student"; let arrstr.split(" "); for(let i0;i<arr.length;i){console.log(arr[i]); }分析&#xff1a;这里利用字符串的空格来分割字符串生成数组。split()方法的参数设置为"…

上班族怎么创业?白领一族创业当老板!

班族怎么创业?很多上班族无法面对每天平淡的生活&#xff0c;于是想要拥有一份属于自己的事业。上班族创业有哪些好的项目呢?结合自已的兴趣爱好&#xff0c;找到适合的项目&#xff0c;上班的同时也能当老板。 上班族怎么创业?创业项目1、开投资额小的特色店 尝试开店创业的…

一文告诉你 Event Loop 是什么?

Event Loop 也叫做“事件循环”&#xff0c;它其实与 JavaScript 的运行机制有关。 JS初始设计 JavaScript 在设计之初便是单线程&#xff0c;程序运行时&#xff0c;只有一个线程存在&#xff0c;在特定的时候只能有特定的代码被执行。这和 JavaScript 的用途有关&#xff0c;…

Spring Boot -Shiro配置多Realm

2019独角兽企业重金招聘Python工程师标准>>> 核心类简介 xxxToken&#xff1a;用户凭证 xxxFilter&#xff1a;生产token&#xff0c;设置登录成功&#xff0c;登录失败处理方法&#xff0c;判断是否登录连接等 xxxRealm&#xff1a;依据配置的支持Token来认证用户信…

idea工具debug断点红色变成灰色

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 没事别瞎点&#xff0c;禁用了断点当然不走了 转自&#xff1a;https://blog.csdn.net/anlve512/article/details/54583469

2020-3-20前端题目

题目一&#xff1a; 判断checked复选框是否有被选中 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <script> window.onload () > {let odivdocument.getElementById("ant");let ckdocument.getElementById(&…

上班族如何当老板 五大模式任你选

中国教育在线讯 辞职创业&#xff0c;还是维持现在稳定的工作?这个是很多上班族都纠结过的问题&#xff0c;一边是稳定的工作和收入&#xff0c;一边是创业当老板的诱惑&#xff0c;真是很难选择。 其实&#xff0c;如果安排合理是可以“鱼与熊掌”兼得的&#xff0c;沈阳市古…

利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序

利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序 前面两篇文章已经介绍过 tap/tun 的原理和配置工具。这篇文章通过一个编程示例来深入了解 tap/tun 的程序结构。 01 准备工作 首先通过 modinfo tun 查看系统内核是否支持 tap/tun 设备驱动。 Copy[rootby ~]# modinfo tun f…

2020-3-21

题目一&#xff1a; JavaScript 获取月份最后一天日期 月份最后一天日期可能是不同的&#xff0c;比如有的是30、有的是31还有的是28。 <!DOCTYPE html><html> <head> <meta charset" utf-8"> <script type"text/javascript"&…

正方形矩阵求对角线之和

nint(input()) a[] for i in range(n): #循环体里面加入input&#xff08;&#xff09;可以实现一共执行n次input&#xff08;&#xff09; lst[int(x) for x in input().split()]a.append(lst) #用列表解析&#xff0c;两层列表代表行列&#xff0c;很巧妙的方法 w0 bl…

解决: Unable to connect to zookeeper server within timeout: 5000

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一个项目启动不起来了&#xff0c;报错如题&#xff1a; Caused by: org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to c…

闲钱请看如何处理

买一点基金定投。基金是专家帮你理财。基金的起始资金最低单笔是1000元,定投200元起投 买基金到银行或者基金公司都行。银行能代理很多基金公司的业务&#xff0c;具体开户找银行理财专柜办理。现在有些证券公司也有代理基金买卖的。在银行开通网上银行后网上购买一般收费上有优…