对Python生成器、装饰器、递归的使用详解


Posted in Python onJuly 19, 2019

1、Python生成器表达式

1)、Python生成器表达式

语法格式:

(expr for iter_var in iterable)

(expr for iter_var in iterable ifcond_expr)

2)、自定义生成器

函数中使用yield,会返回一个生成器对象。yieldx

生成器使用示例:

In [1]:list((i**2 for i in range(1,11)))

Out[1]:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

In [2]:def genNum(x):

 ...:  y = 0

 ...:  while y <= x:

 ...:    yield y

 ...:    y += 1

In [3]: g1= genNum(4)

In [4]:type(g1)

Out[4]:generator

In [5]:g1.next()

Out[5]:0

In [6]:g1.next()

Out[6]:1

In [7]:g1.next()

Out[7]:2

In [8]:g1.next()

Out[8]:3

In [9]:g1.next()

Out[9]:4

In [10]:g1.next()

--------------------------------------------------

StopIteration      Traceback (most recent call last)

in()

----> 1g1.next()

StopIteration:

In [11]:def genNum(n):

 ....:  i = 1

 ....:  while i <= n:

 ....:    yield i ** 2

 ....:    i += 1

In [12]:g1 = genNum(20)

In [13]:for i in g1:

 ....:  print i,

 ....:  

1 4 9 1625 36 49 64 81 100 121 144 169 196 225 256 289 324 361400

2、Python装饰器

1)、装饰器本身是一个函数,用于装饰其它函数;

2)、功能:增强被装饰函数的功能;

装饰器一般接受一个函数对象作为参数,以对其进行增强

例1:装饰器使用示例

In [1]:def decorater(func):

 ...:  def wrapper():

 ...:    print "Just a Decorater!"

 ...:    func()

 ...:    raw_input('Please Input your name:')

 ...:  return wrapper

 ...:

In [2]:@decorater

  ...:def show():

 ...:  print "I am from China."

 ...:  

In [3]:show()

Just aDecorater!

I am fromChina.

PleaseInput your name:Fieldyang

例2:对能够传入参数的函数进行装饰

In [1]:def decorater(func):

 ...:  def wrapper(x):

 ...:    print "Just a Decorater!"

 ...:    func(x)

 ...:    raw_input('Please Input your name:')

 ...:  return wrapper

 ...:

In [2]:@decorater

  ...:def show(x):

 ...:  print "I am from China.%s" %x

 ...:  

In [3]:show('how are you ?')

Just aDecorater!

I am fromChina.how are you ?

PleaseInput your name:Fieldyang

3、Python递归

递归需要边界条件,递归前进段和递归返回段;

10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 *1

    10 * (10-1)* ((10-1)-1)* ...

递归函数使用示例:

In [1]:def recursion(n):

 ...:  if n <= 1: return 1

 ...:  else: return n * recursion(n-1)

 ...:

#递归函数相当于如下过程:

In [2]: recursion(3) = 3 * recursion(2)= 3 * 2 *recursion(1)=3*2*1

KeyboardInterrupt

In [3]:recursion(3)

Out[3]:6

In [4]:recursion(4)

Out[4]:24

In [5]:recursion(5)

Out[5]:120

In [6]:recursion(10)

Out[6]:3628800

以上这篇对Python生成器、装饰器、递归的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python比较两个图片相似度的方法
Mar 13 Python
Python通过正则表达式选取callback的方法
Jul 18 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
使用python的pyplot绘制函数实例
Feb 13 Python
python实现飞船游戏的纵向移动
Apr 24 Python
django rest framework serializers序列化实例
May 13 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
python编写五子棋游戏
May 25 Python
python实现简单的聊天小程序
Jul 07 Python
Python日志模块logging用法
Jun 05 Python
django中SMTP发送邮件配置详解
Jul 19 #Python
对Python函数设计规范详解
Jul 19 #Python
在django view中给form传入参数的例子
Jul 19 #Python
使用Python制作表情包实现换脸功能
Jul 19 #Python
解决Django一个表单对应多个按钮的问题
Jul 18 #Python
Django工程的分层结构详解
Jul 18 #Python
django mysql数据库及图片上传接口详解
Jul 18 #Python
You might like
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
python 动态绘制爱心的示例
2020/09/27 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
采购主管工作职责
2013/12/12 职场文书
精彩自我鉴定
2014/01/16 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
超市店庆活动方案
2014/08/31 职场文书
合作协议书范本
2014/10/25 职场文书
城管个人总结
2015/02/28 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers