递归函数、生成器、装饰器

递归:  在函数执行中调用自身

  • 必须有边界条件,递归前进段和递归返回段

  • python中递归有层次限制

递归函数实现阶乘

def fact(n): if n <= 1:return 1else:return n * fact(n-1)

调用:fact(3)=3fact(2)=32fact(1)=32*1

fact(3)
6

实现斐波拉契数列

def fib1(n):if n <= 1:return 1else:return(fib1(n-1)+fib1(n-2))
for i in range(10):print(fib1(i))
1
1
2
3
5
8
13
21
34
55

生成器

  • 普通函数遇到return返回函数结束,再次执行又从第一条语句开始

  • 生成器遇到yield返回函数被挂起,再次执行则从上一次返回yield语句的地方继续执行

定义一个生成器函数

def gen():print('step 1')yield 1print('step 2')yield 2print('step 3')yield 3
a=gen()next(a)
step 1
1
next(a)
step 2
2

装饰器:在不改变已存在对象的基础上为其添加额外功能

  • 典型应用:插入日志、测试性能、事物处理

给foo函数计算运行时间

import timedef foo():print('in foo()')# 定义一个计时器,传入一个函数,并返回另一个附加了计时功能的方法def timeit(func):# 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装def wrapper():start = time.clock()func()end =time.clock()print('used:', end - start)# 将包装后的函数返回return wrapperfoo = timeit(foo)foo()
in foo()
used: 0.0018359999999972842

python装饰器提供的语法糖效果,下面的@timeit跟上面的foo = timeit(foo)是完全等价的

import timedef timeit(func):# 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装def wrapper():start = time.clock()func()end =time.clock()print('used:', end - start)# 将包装后的函数返回return wrapper@timeitdef foo():print('in foo()')foo()
in foo()
used: 0.0013369999999994775

转载于:https://blog.51cto.com/mofeihu/1877144

递归函数、生成器、装饰器相关推荐

  1. 迭代器 生成器 装饰器 匿名函数

    迭代器 生成器 装饰器 匿名函数 #可迭代对象:列表.字典.集合.字符串:能够被for 循环遍历的对象# 数字类型不可迭代:# name="wangyifei"# for i in ...

  2. [转载] 递归函数python基例_python递归函数详解 python 递归函数使用装饰器

    参考链接: Python递归 移动宽带检查显示 CRM,radius状态不一致是怎么回事啊?您可以把电信宽带猫等设备重启试一下,如果仍然不行,可以拨打10000号请工作人员帮您查看.处理. 电信宽带诊 ...

  3. 迭代器/生成器/装饰器 /Json pickle 数据序列化

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  4. Python基础 day4 迭代器生成器 装饰器 Json pickle 数据序列化 软件目录结构规范 作业:ATM项目开发...

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 列表生成器 1.列表生成式,迭代器&生成器 列表生成式 孩子, ...

  5. Python 3 学习——函数扩展and迭代器生成器装饰器

    Python 学习的第九小节 写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享 一.学习笔记 1. 高阶函数 函数名可以作为函数参数输入 .可以进行赋值.还可以作为返回值. 2.作用域 ...

  6. python 生成器装饰器_对Python生成器、装饰器、递归的使用详解

    1.Python生成器表达式 1).Python生成器表达式 语法格式: (expr for iter_var in iterable) (expr for iter_var in iterable ...

  7. Python开发基础总结(三)排序+迭代+生成器+装饰器

    一.排序 1.    list自己提供了排序的函数:sort. 2.    sort的参数: a)    cmp是一个比较函数,输入两个元素,比较大小,返回值为-1,0,1. b)    key也是一 ...

  8. python学习day-8 迭代器 生成器 装饰器

    http://www.cnblogs.com/linhaifeng/articles/7580428.html 迭代器#迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代, ...

  9. python 递归函数_让你Python到很爽的加速递归函数的装饰器

    Python技巧--好用的一个装饰器 今天我们会讲到一个装饰器. 注记:链接"装饰器"指向廖雪峰老师的Python3教程中的装饰器教程.可以在这里快速了解什么是装饰器. `@fun ...

  10. python迭代器生成器装饰器

    基本概念 学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895 817 687有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家一起学习交流! 1.容器 ...

最新文章

  1. 按键驱动的思路分析和代码实现
  2. Mex文件在VS2010中调试方法
  3. python元类简述
  4. ViewGroup.LayoutParams
  5. 20101008 搬家
  6. webservice 启用代理服务器
  7. Hadoop基础--HDFS/Yarn/MapReduce概述
  8. ES 必备插件的安装
  9. java学生管理系统报告_java学生管理系统总结报告.doc
  10. 连接池原理解读,各个连接池对比
  11. 华硕服务器怎么装win7系统教程,华硕win7系统重装教程
  12. 解决scrapy下载小说乱序
  13. ssh publisher_3种Microsoft Publisher的开源替代品
  14. 什么是单片机中的掉电复位(BOR)?如何防止错误掉电
  15. 量化思维与常见的量化标
  16. oracle导出辅助账明细,AO2011导入国库集中支付系统3.0的辅助账资料.doc
  17. java基础练习—逢七游戏、不死神兔、百钱百鸡、利滚利
  18. java字符串--数组(相互转化)
  19. # Typora使用教程
  20. 从”腾讯为什么要区分q币和q点”谈58与赶集余额商业产品

热门文章

  1. linux下创建proc文件系统,[转载]Linux下的proc文件系统(转载)
  2. python统计字符串中数字个数 socket_Python中socket中的listen()里参数(数字)到底代表什么?...
  3. truncate数据后回收空间_Truncate用法详解
  4. 计算机缺乏内存将无法运行,电脑增加内存为什么无法启动
  5. android 动画 返回,Android TranslateAnimation在动画后重置
  6. RDMA技术详解(一):RDMA概述
  7. matlab cell取一列,MATLAB cell struct
  8. CF1010F Tree
  9. mysql查询优化技巧
  10. Python Requests快速入门