第33天pytho学习装饰器:高级函数部分演示
时间:2019-09-28
本文章向大家介绍第33天pytho学习装饰器:高级函数部分演示,主要包括第33天pytho学习装饰器:高级函数部分演示使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#迭代器:把列表变为迭代器
# l=[1,3]
# l1=iter(l)#转换成迭代器
# print(l1)
# print(next(l1))#——————转换成迭代器把第一个值取出来
#装饰器:本质就是函数;功能:为其他函数添加附加功能
#原则:1、不修改被修饰函数的源代码 2、不修改被修饰函数的调用方式
#统计函数的时间
# import time#添加个时间模块
# def test(l):
# start_time=time.time()#开始时间
# res=0
# for i in l:
# time.sleep(0.1)#让函数睡0.1秒
# res+=i
# stop_time=time.time()#停止时间
# print("运行时间函数时间 %s" %(stop_time-start_time))
# return res
# print(test(range(100)))
#装饰器的好处:就是解决已经在运行的函数添加功能,不可能把之前的函数拿出从新搞,避免其他地方在应用
#演示的装饰器-------------------运行有问题等修改
import time#添加个时间模块
#使用装饰器来修饰下面求值的函数
# def time(fun):
# def wapper(*args,**kwargs):
# start_time=time.time()
# res=fun(*args,**kwargs)
# stop_time=time.time()
# print("函数运行时间 %s" %(stop_time-start_time))
# return res
# return wapper
#
# #函数求职
# @time
# def test(l):
# res=0
# for i in l:
# time.sleep(0.1)#让函数睡0.1秒
# res+=i
# return res
# print(test(range(20)))
#装饰器知识储备:装饰器=高级函数+函数嵌套+闭包
#高级函数:1、函数接收的参数是一个函数名;2、函数的返回值是一个函数。只要满足1或2任意一个条件都可以称之为高级函数
# def foo():
# print("您好foo")
#
# #这个是高级函数
# def test(fun):
# print(fun)
# fun()#执行运行结果
# test(foo)
# #求foo的运行时间,但是以下方法实现了没有修改原函数就实现求值,但是修改了调用函数的方式
# import time
# def foo():
# time.sleep(0.1)
# print("您好foo")
#
# #这个是高级函数,参数是函数名的方式
# def test(fun):
# print(fun)
# start_time=time.time()
# fun()#执行运行结果
# stop_time=time.time()
# print("foo运行时间 %s" %(stop_time-start_time))
# test(foo)#正确的方式是直接foo()执行,但是我这使用了test(foo),修改了函数的调用方式
#使用高级函数:返回值和参数都是函数
# def foo():
# print("函数 foo")
#
# def test(fun):
# return fun
#
# res=test(foo)#拿到地址
# res()#直接运行
# #实现不改调用函数方式
# def foo():
# print("函数 foo")
#
# def test(fun):
# return fun
# foo=test(foo)#在赋值给foo
# foo()#调用方式还是foo()
#统计foo运行时间,不修改foo原代码,不修改foo的调用方式
#多运行一次了,失败的列子
# import time
# def foo():
# time.sleep(3)
# print("来自 foo")
#
# def time1(fun):
# start_time=time.time()
# fun()#执行运行结果
# stop_time=time.time()
# print("foo运行时间 %s" %(stop_time-start_time))
# return fun
#
# foo=time1(foo)
# foo()#结果:来自 foo foo运行时间 3.000626564025879 来自 foo
#总结:上面应用了高级函数,但是实现不了装饰器
#总结:1、使用传入参数是函数时,没有修改原来函数,但是修改了调用方式。
# 2、使用返回值是函数时,不修改调用方式
原文地址:https://www.cnblogs.com/jianchixuexu/p/11605370.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 带你跳出源码地狱,从原理上理解MyBatis对Spring源码的扩展实现
- 网上翻译嫌麻烦?Python破解有道JS加密,让你随时能翻译
- 前端模块化开发--React框架(一): 入门和面向组件编程
- Python爬虫实战练习:爬取美团旅游景点评论数据
- Python爬虫实战:爬取链家网二手房数据
- 前端模块化开发--ES6相关知识
- (一)ROS开发平台环境搭建与测试
- 前端模块化开发--Node基础&&WebPack模块化开发
- CNN神经网络--手写数字识别
- 关于模型预测结果好坏的几个评价指标
- SpringBoot微服务架构项目--Union社交平台
- 如何衡量前端基建的效能价值?
- mbedtls | 移植mbedtls库到STM32裸机的两种方法
- 实用小技巧 | 用socket玩转http接口
- 深度学习之人脸识别模型--FaceNet