python 生成器装饰器_对Python生成器、装饰器、递归的使用详解
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生成器、装饰器、递归的使用详解
本文地址: http://www.cppcns.com/jiaoben/python/265944.html
python 生成器装饰器_对Python生成器、装饰器、递归的使用详解相关推荐
- python定义静态变量_对Pyhon实现静态变量全局变量的方法详解
python不能像C++一样直接定义一个static变量或者通过extern来导入别的库的变量而实现数据共享,但是python的思想是通过模块化来解决这个问题,就是通过模块来实现全局变量. 首先新建一 ...
- python中transpose函数_对numpy中的transpose和swapaxes函数详解
transpose() 这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数. 我们看如下一个numpy的数组: `arr=np.arange(16).reshape(( ...
- python做估值模型_通证估值模型-费雪模型与净现值模型详解
通证估值模型-费雪模型与净现值模型详解 一.费雪模型,适合货币型通证 1)公式:MV= PQ M: 货币供应量 V: 货币流通速度 P:劳务平均价格 V:劳务总数 维基百科地址:Equation of ...
- python alpha beta 剪枝_一看就懂的 Alpha-Beta 剪枝算法详解
Alpha-Beta剪枝用于裁剪搜索树中没有意义的不需要搜索的树枝,以提高运算速度. 假设α为下界,β为上界,对于α ≤ N ≤ β: 若 α ≤ β 则N有解. 若 α > β 则N无解. ...
- Python|线程和进程|阻塞|非阻塞|同步|异步|生成器和协程|资源竞争|进程间通信|aiohttp库|daemon属性值详解|语言基础50课:学习(11)
文章目录 系列目录 原项目地址 第34课:Python中的并发编程-1 线程和进程 多线程编程 使用 Thread 类创建线程对象 继承 Thread 类自定义线程 使用线程池 守护线程 资源竞争 G ...
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- python大数据免费_用python做大数据
不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...
- [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
最新文章
- 基于CentOS中PXE网络环境构建实例
- 直播预告丨聚焦银行数字化运营体系搭建,助力银行构建核心竞争力
- ActiveMQ的简单例子应用
- Linux Shell编程第四篇case语句
- python爬取豆瓣电影TOP250
- 学习PHP时的一些总结(五)
- Hdu1166单点更新线段树
- np.random.seed(0)作用
- java 将pdf转换成word_java如何实现pdf转word?
- 【引用】使用CommonDialog的ShowSave后如何判断是保存还是取消?
- 张宇1000题高等数学 第十三章 多元函数微分学
- 写CSDN博客时,调节字体大小、颜色及其他样式的常用操作方法
- radmin注册密码
- Ubuntu快速下载电驴ed2k文件
- matlab中ans的含义
- 元素滚动 scroll 系列
- SELECT不加FROM子句的用法
- 使用openpyxl进行多个excel数据合并
- Typora一款让你无法拒绝的MarkDown编辑器
- 什么是支撑位和阻力位
热门文章
- 并注册烧写钩子 获取启动介质类型_PyTorch中对张量登记注册反向传播的钩子函数,并展示调用顺序...
- Linux后台进程(和jobs、bg、fg)
- 【caffe】ubuntu配置python接口----pycaffe
- 目标检测——数据增强的学习笔记
- CUDA——调试“ImportError: libcudart.so.9.2: cannot open shared object file: No such file or directory”
- Machine Learning课程中的常见单词的含义
- Windows下anyproxy的配置文件路径
- CPU中的Little Endian与Big Endian
- Flex的Tree全部展开收缩,ji展开选中单个节点
- 【Linux】Ubuntu 代理配置