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语句返回. 函数的优点之一是,可以将代码块与主程 ...
随机推荐
- spring cloud 使用spring cloud bus自动刷新配置
Spring Cloud Bus提供了批量刷新配置的机制,它使用轻量级的消息代理(例如RabbitMQ.Kafka等)连接分布式系统的节点,这样就可以通过Spring Cloud Bus广播配置的变化 ...
- Centos7上配置网络和本地yum方法
配置网络yum源 前提:1.这个系统能上网 2.vim /etc/resolv.conf nameserver 8.8.8.8 nameserver 114.114.114.114 操作如下: 1.m ...
- 小程序报错:request:fail错误(含https解决方案)(真机预览问题)
问题描述:域名已经备案,我全部都有,也在后台配置了,但是手机预览,还是请求失败, PC端是可以请求数据出来的 新版开发者工具增加了https检查功能:可使用此功能直接本地避开ssl协议版本检查,但是此 ...
- error: <item> inner element must either be a resource reference or empty.
FAQ: Android resource compilation failedOutput: /home/cmm/code/AndroidHttpCapture/app/build/intermed ...
- 如何把网址配置为http和https可以同时访问
1.打开iis7 ,找到具体站点 2.点击站点后右侧有个绑定按钮 3.点击绑定,增加https,设置端口,ssl选择 iis证书 4.找到ssl设置,要求证书不勾选,客户证书,忽略 5.如果右侧不显示 ...
- 连接Oracle时报错ORA-12541: TNS: 无监听程序
从开始菜单中打开“Oracle Net Configuration Assistance”,选择“监听程序配置”,如下图所示,点击下一步. 选择“重新配置”,如下图所示,点击下一步. 选择监听 ...
- javascript 正则表达式(十)
一.什么是正则 在常见的字符串检索和替换中,我们需要提供一种模式表示检索或替换的规则.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. abc [a-z]{4} \d\d\d 二. ...
- Nessus忘记密码的解决
进入到Nessus安装目录下
- 伪分布式hbase数据迁移汇总
https://www.jianshu.com/p/990bb550be3b hbase0.94.11(hadoop为1.1.2,此电脑ip为172.19.32.128)向hbase1.1.2 (ha ...
- ansible Invetory(管理主机信息)
1. 定义组机和组 inventory文件可以是许多格式之一,具体取决于您拥有的inventory插件. 对于这个例子, /etc/ansible/hosts的格式是一个INI(类似于Ansible的 ...