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语句返回. 函数的优点之一是,可以将代码块与主程 ...
随机推荐
- jQuery常见的几个文档处理方式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Python 读写excel类
#-*- coding: utf8 -*- import xlrd import xlwt from Public import GlobalClass def openexcel(path): tr ...
- Html页面添加百度地图
1.进入百度地图开放平台 http://lbsyun.baidu.com/ 2.进入右上角的 “API控制台” 在这里创建应用 并 获取密钥 3.进入 如下地址 创建地图 http://api.m ...
- 常见的User-Agent及免费代理IP网站
常见的User-Agent 1.Android Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 ...
- 微信小程序--代码构成---WXML 模板
WXML 模板 从事过网页编程的人知道,网页编程采用的是 HTML + CSS + JS 这样的组合,其中 HTML 是用来描述当前这个页面的结构,CSS 用来描述页面的样子,JS 通常是用来处理这个 ...
- SQL Server索引误区使用建议
常见的误区: 1.数据库不需要索引 2.主键总是聚集的 3.联机索引操作不引起阻塞 4.复合索引下列的顺序不重要 5.聚集索引以物理顺序存储 6.填充因子可以应用在索引的插入过程中 7.每个表应该有聚 ...
- Linux查找当前目录5天的文件并打包
find . -name "*.sh" -mtime -5 |xargs tar zcvf /tmp/log.tar.gz 解释: *.sh是查找以.sh结尾的文件,也可以是其他如 ...
- 用Web api /Nancy 通过Owin Self Host简易实现一个 Http 服务器
过去做 端游的Http 服务器 用的WebApi 或者Mvc架构,都是放在iis...而我已经是懒出一个地步,并不想去配iis,或者去管理iis,所以我很喜欢 Self host 的启动方式. C#做 ...
- centos7 yum install redis
直接yum 安装的redis 不是最新版本 yum install redis 如果要安装最新的redis,需要安装Remi的软件源,官网地址:http://rpms.famillecollet.co ...
- bzoj4428
题解: f[i]=f[n/(j+1)向上取整]+p*j+k 然后可以通过枚举每个数的因子来做 时间复杂度nlogn(打表看了一下sigma (i因子个数) 是比较接近nlogn的) 可以有方法优化到n ...