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中,函数也是一种对象,因此可以把定义函数时的函数名看作是函数对象的一个引用.既然是引用,因此可以将函数赋值给一个变量,也可以把函数作为一 ...
随机推荐
- 安装 log.io 实时监控 php_error 日志
Log.io 实时监控 php_error.log 日志 开启 php_error 实时监控日志的第一步,要首先开启 php_error 的功能. vi php.ini 修改 PHP 配置文件,将 ; ...
- x01.Tetris: 俄罗斯方块
最强大脑有个小孩玩俄罗斯方块游戏神乎其技,那么,就写一个吧,玩玩而已. 由于逻辑简单,又作了一些简化,所以代码并不多. using System; using System.Collections.G ...
- PHP加密技术
一.MD5加密 直接干,这里以一个登录页面为例: <?php require_once 'config/database.config.php'; $act=$_REQUEST['act']; ...
- [LeetCode] Implement strStr() 实现strStr()函数
Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle ...
- WinRAR5.4
Winrar是一款优秀的压缩解压工具! 免费版 :http://www.winrar.com.cn/ ###加载启动广告,支持正版 海阔天空:http://pan ...
- array
1.array() //创建数组 2.array_change_key_case($arr,CASE_UPPER); //将键名全部大写,不加参数全变小写--没啥用 3.array_chunk($ar ...
- 递推 hdu 2064
z[n] n个盘子从1到3次数 先想2个的时候 1->2 2->3 1->2 3->2 2->1 2->3 1->2 2->3 显然 要先把上面n- ...
- mysql-netstat
在Linux服务器中想要查看连接到服务器的所有IP地址只需要输入命令netstat -an就可以看到全部的资料. 该命令的常见参数供您参考: -a (all)显示所有选项,默认不显示LISTEN相关: ...
- ubuntu中phpmyadmin密码忘记
在安装mysql时,默认只让你设置了root的密码,如果root的密码忘记,处理办法如下 第一步: 这时你需要进入/etc/mysql目录下,然后sudo vim/vi debian.cnf查看里面的 ...
- 使用Amoeba for mysql实现mysql读写分离
Amoeba主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.Qu ...