python --> 递归 以及装饰器
一、递归知识
函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数。
递归在斐波那契数列的应用【斐波那契数列特点:前两个数字相加之和等于下一个数字】
例一、打印出小于10000的斐波那契数列
def f(a1,a2):
if a1 > 10000:
return
print(a1)
a3 = a1 + a2
f(a2,a3) res = f(0,1)
print(res)
例二、获得斐波那契数列第10个数字
def f(a1,a2,tries):
if tries == 10:
return a1
a3 = a1 + a2
f(a2,a3,tries+1) result = f(0,1,1)
print(result)
二、装饰器
装饰器用来装饰函数,可以让函数在执行之前后做一些操作,让调用者的执行方式不改变,并且不再函数内部进行修改,把原函数封装在新函数里,执行的时候都执行掉
装饰器的原理: @ 符号在python中有特殊意义,后面可加函数名,例outer,就是代表执行函数outer(),并且将其下面的函数名,例如 f1(原来的函数) ,当作参数传递给outer函数,并将outer函数的返回值赋值 例如 inner 给下面的函数f1,即下面的函数变成了 inner 函数
# python从上到下进行执行,如果2个函数名一样,那么调用的时候,就是执行下面的函数,所以 @outer 之后,执行函数,下面被装饰的函数 f1()就变成了 inner(),以后再调用 f1 函数就是在调用 inner 函数
简单装饰器示例如下:
def outer(func):
def inner(*args,**kwargs):
print('hello')
res = func(*args,**kwargs)
print('End')
return res
return inner @outer
def f1(*arg):
print('nice to meet you')
return 'F1' r = f1()
print(r)
总结:只要函数应用了装饰器,函数就会变成了装饰器的内层函数,以后执行此函数时,就是在执行内层函数,给某个函数使用多个装饰器,先执行最上面的装饰器,最上面的装饰器也要包含inner内容的,inner里肯定也要包含原函数的
双层装饰器示例如下:
def outer2(fuc):
def outer1(*args,**Kwargs):
print('hello again')
res = fuc(*args,**kwargs)
print('goodbye')
return res
return outer1 def outer(func):
def inner(*args,**kwargs):
print('hello')
res = func(*args,**kwargs)
print('have a nice day')
return res
return inner @outer2
@outer
def f1(*arg):
print('goodday')
return 'F1' result = f1()
print(result)
python --> 递归 以及装饰器的更多相关文章
- python高级之装饰器
python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函数的定义: 满足下面两个条件之 ...
- 第二篇:python高级之装饰器
python高级之装饰器 python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函 ...
- [python基础]关于装饰器
在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...
- python笔记 - day4-之装饰器
python笔记 - day4-之装饰器 需求: 给f1~f100增加个log: def outer(): #定义增加的log print("log") ...
- Python深入05 装饰器
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...
- Day04 - Python 迭代器、装饰器、软件开发规范
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
- Noah的学习笔记之Python篇:装饰器
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- Python进阶之装饰器
函数也是对象 要理解Python装饰器,首先要明白在Python中,函数也是一种对象,因此可以把定义函数时的函数名看作是函数对象的一个引用.既然是引用,因此可以将函数赋值给一个变量,也可以把函数作为一 ...
随机推荐
- 昨天写支付接口时遇到支付接口返回数据接收地址,session数据丢失(或者说失效)的问题
在网上找了好久 才找到答案 分享给大家 http://www.zcool.com.cn/article/ZMzYwNTI=.html
- 【转】Xen与XenServer的区别
说到XenServer,总是离不开Xen,所以我要说他们的区别,得首先从Xen开始说起! Xen体系架构 Xen hypervisor体系架构 Xen 的 VMM ( Xen Hypervisor ) ...
- [No0000AC]全局鼠标键盘模拟器
之前网上下载的一位前辈写的工具,名叫:Dragon键盘鼠标模拟器,网址http://www.esc0.com/. 本软件能够录制键盘鼠标操作,并能按要求回放,对于重复的键盘鼠标操作,可以代替人去做,操 ...
- BFC和haslayout
待补充 参考链接:http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html 标准浏览器: BFC(block formatt ...
- es-redis
列出一些redis命令: 免得我不是dba,每次用都得翻看文档,很蛋疼.于是写了个连接脚本 [root@elk-redis-test105 ts]# ls conn-redis.sh [root@el ...
- 自动判断应该Ajax还是return
起因 最近回顾以前的代码,发现一个偶尔会见到的现象.一个类里面的方法可能需要Ajax返回,也有可能需要函数return.这个现象发生在网站MVC中的 逻辑层(或模型层),示例如下.IndexCtrl是 ...
- 修改 jquery.validate.js 支持非form标签
尝试使用markdown来写一篇blog,啦啦啦 源代码传送门:github 在特殊情况下我们使用jquery.validate.js对用户输入的内容做验证的时候,表单并不是一定包含在form之中,有 ...
- 在移动端中的flex布局
flex布局介绍: flex布局很灵活, 这种布局我们也可以称之为弹性布局, 弹性布局的主要优势就是元素的宽或者高会自动补全; flex布局实例: 比如有两个div,一个div的宽度为100px, ...
- javascript 中 Promise的使用
有点经验的js前端都知道 ajax异步函数里面的结果不会立即返回,如果你想在一个异步函数得到某个结果后去执行一个语句怎么做? if ( 异步函数 ) { 语句 } 可能很多人都踩过这样坑,这个时候 ...
- 冰冻三尺非一日之寒--web框架Django(翻页、cookie)
第二十一章 cookie 1.获取Cookie: request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, ...