对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实现的简单文件传输服务器和客户端
Apr 08 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
python中强大的format函数实例详解
Dec 05 Python
python ---lambda匿名函数介绍
Mar 13 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
python中tab键是什么意思
Jun 18 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 Python
Django执行源生mysql语句实现过程解析
Nov 12 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文件锁定写入实例解析
2014/07/14 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
DOM 基本方法
2009/07/18 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
json的使用小结
2016/06/08 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
JS实现吸顶特效
2020/01/08 Javascript
深入讲解Python中的迭代器和生成器
2015/10/26 Python
python变量不能以数字打头详解
2016/07/06 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
Python包和模块的分发详细介绍
2020/06/19 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
交通安全寄语大全
2014/04/08 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
Python中rapidjson参数校验实现
2021/07/25 Python
Oracle中日期的使用方法实例
2022/07/07 Oracle