对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实现代码统计工具(终极篇)
Jul 04 Python
python如何实现反向迭代
Mar 20 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
python如何查看安装了的模块
Jun 23 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
python3使用diagrams绘制架构图的步骤
Apr 08 Python
python数字图像处理之图像自动阈值分割示例
Jun 28 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计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
小程序页面动态配置实现方法
2019/02/05 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
简单的Python的curses库使用教程
2015/04/11 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
详解Python学习之安装pandas
2019/04/16 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
学生检讨书怎么写
2014/10/09 职场文书
党校学习党性分析材料
2014/12/19 职场文书
春风化雨观后感
2015/06/11 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android