对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内置的字符串处理函数整理
Jan 29 Python
Python升级提示Tkinter模块找不到的解决方法
Aug 22 Python
讲解Python中fileno()方法的使用
May 24 Python
详谈Pandas中iloc和loc以及ix的区别
Jun 08 Python
python可视化实现代码
Jan 15 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
python实现的config文件读写功能示例
Sep 24 Python
Python Django路径配置实现过程解析
Nov 05 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
python statsmodel的使用
Dec 21 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 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函数代码
2010/04/22 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
php注销代码(session注销)
2012/05/31 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
python使用opencv读取图片的实例
2017/08/17 Python
Python中django学习心得
2017/12/06 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
Python脚本调试工具安装过程
2021/01/11 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
Java软件工程师综合面试题笔试题
2013/09/08 面试题
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
机械专业技术员求职信
2014/06/14 职场文书
企业授权委托书范本
2014/09/22 职场文书
保护环境的宣传语
2015/07/13 职场文书
小学体育教学随笔
2015/08/14 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang