python基础一 ------装饰器的作用
装饰器:
本质属性:为函数增加新功能的函数,只是有个语法糖,显得高大上而已
#装饰器
#引子 计算斐波那契数列,第50 项
import time
def fibonacci(num):
if num<=1:
return 1
else:
return fibonacci(num-1)+fibonacci(num-2)
start = time.time()
print(fibonacci(35))
end = time.time()
print(end-start)
print("-----------------------------分割线1-------------")
'''
结果:14930352
5.807300329208374
'''
#计算浪费了好多的时间,比如计算9,等于7+8项,再计算第7和8 第七=5+6;第八=7+6 重复计算了第七和第6
#改进,增加cache
def fibonacci(num,cache={}): if num<=1:
cache[num] = 1 return 1
else:
if num in cache.values():
return cache[num]
result = fibonacci(num-1,cache)+fibonacci(num-2,cache)
cache[num] = result
return result
start = time.time()
print(fibonacci(35))
end = time.time()
print(end-start)
'''
改进结果:
14930352
6.50729775428772
-----------------------------分割线2-------------
14930352
0.19814443588256836
'''
#引子2——台阶问题:一共10个台阶的楼梯,从下去上,一次迈1-3个台阶,
#不能后退,走完这个楼梯有多少走法
def climb(num,steps):
count = 0
if num==0:
count= 1
elif num>0:
for step in steps:
count += count(num-strp,steps)
return count
@memo
def climb_2(num,steps):
count = 0
if num==0:
count= 1
elif num>0:
for step in steps:
count += count(num-strp,steps)
return count
#此时,当num过大时,同样进行了重复的计算,比如100个台阶,当从第一个迈1个到达的50
#还是第一个迈2个到达的50 此后的计算都是重复的
'''
当多个函数都用到了相同的方法来增加函数的功能时,即将函数中相同的功能抽象出来,
即可得到一个新的函数,这个函数用来修饰其他的函数,即这个函数就是装饰器
''' def memo(func):
cache ={} #每次执行内函数时,cache还会在内存中,此时是闭包
def wrap(*args):
if args not in cache:
cache[args] = func(*args)
return cache[args]
return wrap
#使用装饰器: fibonacci_2 = memo(fibonacci_2)
@memo
def fibonacci_2(num):
if num<=1:
return 1
else:
return fibonacci(num-1)+fibonacci(num-2)
start = time.time()
print(fibonacci_2(35))
end = time.time()
print(end-start)
print("-----------------------------分割线3-------------")
python基础一 ------装饰器的作用的更多相关文章
- python基础—函数装饰器
python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...
- 十. Python基础(10)--装饰器
十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...
- python基础之 装饰器,内置函数
1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使用外部变量(非全局变量)叫做闭包! def wrapper(): money =10 def inner(num) ...
- Day11 Python基础之装饰器(高级函数)(九)
在python中,装饰器.生成器和迭代器是特别重要的高级函数 https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...
- 1.16 Python基础知识 - 装饰器初识
Python中的装饰器就是函数,作用就是包装其他函数,为他们起到修饰作用.在不修改源代码的情况下,为这些函数额外添加一些功能,像日志记录,性能测试等.一个函数可以使用多个装饰器,产生的结果与装饰器的位 ...
- python基础--定义装饰器(内置装饰器)
装饰器的定义: 装饰器本质上就是一个python函数,它可以让其它函数在不需要做任何代码改动的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景中,比如-- >插入 ...
- [python基础]关于装饰器
在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...
- 【Python基础】装饰器的解释和用法
装饰器的用法比较简单,但是理解装饰器的原理还是比较复杂的,考虑到接下来的爬虫框架中很多用到装饰器的地方,我们先来讲解一下. 函数 我们定义了一个函数,没有什么具体操作,只是返回一个固定值 请注意一下缩 ...
- python基础-----函数/装饰器
函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 函数的优点之一是,可以将代码块与主程 ...
随机推荐
- Nginx详解十一:Nginx场景实践篇之Nginx缓存
浏览器缓存: HTTP协议定义的缓存机制(如:Expires.Cache-control等) 当浏览器第一次请求的时候,浏览器是没有缓存的 第二次请求开始就有缓存了 校验过期机制 配置语法-expir ...
- 第三周学习总结-Java
2018年7月29日 这是暑假第三周.这一周我把找到的Java教学视频看完了. 本周学到了Java剩余的基础知识,比如:抽象类.接口.内部类.几种常用类.IO流.多态.多线程等等. 因为没有书,所以我 ...
- JMeter 提供了六种定时器
JMeter提供了六种定时器,下面让我们一起来学习下JMeter的定时器. 先明确一些概念: 1)定时器是在每个sampler(采样器)之前执行的,而不是之后: 是的,你没有看错,不管这个定时器的位置 ...
- 使用springboot actuator监控应用
微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题? ...
- vue 踩坑记录
1.绑定双击事件用 @dblclick 不要用@ondblclick 在vue中@=on 2.Vue中路由跳转踩坑. 比如我的路由如下定义 routes: [ { path: "/&quo ...
- BZOJ 2989: 数列/4170: 极光
题解: n倍经验题 首先比较容易想到的是对绝对值分类讨论 然后是4维偏序 1.查询和修改顺序 2.x>y 3.a[x]>a[y] 4.(x+a[x])-(y+a[y])<=k 这样是 ...
- Directory 类
Directory 类 该类公开,主要用于创建.移动和枚举通过目录和子目录的静态方法.此类不能被继承. 命名空间: System.IO; 程序集: mscorlib(在 msc ...
- [转]android sqlite db-journal文件产生原因及说明 .
http://blog.csdn.net/kaiwii/article/details/8609093 今天在android中将sqlite的数据库文件生成在SD卡上的过程中,发现生成的.db文件的旁 ...
- mongo 分片
// use ebay // sh.enableSharding("ebay") // db.getCollection("ebay_total_menu_detail_ ...
- 今天开始学习php,粘一些重点放这以便查看记忆。
1.PHP的变量用$定义. PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中. index 保存变量的名称.这个数组可以在函数内部访问,也可以直接用来更新全局变量. 2. ...