- 浏览: 654586 次
- 性别:
- 来自: 淮安
文章分类
- 全部博客 (260)
- Java (0)
- vim (9)
- python (86)
- AdobePDF (2)
- mysql (10)
- Emacs (12)
- JavaScript (18)
- postgresql (2)
- windows (4)
- Eclipse (1)
- debian (4)
- 浏览器 (2)
- html (1)
- rhel (1)
- Linux (4)
- SVN (2)
- Ruby (30)
- ERP (8)
- my_linux_config (2)
- C++ (2)
- CentOS (5)
- Ubuntu (12)
- httpd (3)
- nginx (1)
- CSS (1)
- Agile (1)
- C (3)
- Redmine (2)
- 面试题 (1)
- 收集 (7)
- 架构 (1)
- 服务器 (2)
- logarithms (1)
- 数学 (1)
最新评论
-
hymzjsw:
python 变量命名规范 -
IWSo:
...
mysql #1170错误(42000) BLOB/TEXT Column Used in Key Specification Without a Key Le -
wl59138528:
由于Python臭名昭著的GIL问题,OpenERP 6.1以 ...
OpenERP 部署环境使用说明 -
greybeard:
xiaoyao3857 写道怎么看着一大堆,似乎中间有些东西重 ...
python 变量命名规范 -
xiaoyao3857:
怎么看着一大堆,似乎中间有些东西重复说了吧
python 变量命名规范
基于yield指令,可以暂停一个函数并返回中间结果。该函数将保存执行环境并且可以在必要
时恢复。
该函数将返回一个特殊的迭代器,也就是generator对象,它知道如何保存执行环境。对它的
调用是不确定的,每次都将产生序列中的下一个元素。
生成器对降低程序复杂性很有帮助:
Python引入的与生成器相关的最后一个特性是提供了与next方法调用的代码进行交互的
功能。yield将变成一个表达式,而一个值可以通过名为send的新方法来传递:
send的工作机制与next一样,但是yield将变成能够返回传入的值。因为,这个函数可以
根据客户端代码来改变其行为。同时,还添加了throw和close两个函数,以完成该行为。
它们将向生成器抛出一个错误:
throw允许客户端代码传入要抛出的任何类型的异常;
close的工作方式是相同的,但是将会抛出一个特定的异常----GeneratorExit,在
这种情况下,生成器函数必须再次抛出GeneratorExit或StopIteration异
常。
生成器表达式:
这种表达式常被称为生成器表达式或genexp。每当在yield表达式上创建简单的循环时,
都应该使用它,或者用它来代替表现类似迭代器的列表推导。
时恢复。
>>> def fibonacci(): ... a, b = 0, 1 ... while True: ... yield b ... a, b = b, a + b ... >>> fib = fibonacci() >>> fib.next() 1 >>> fib.next() 1 >>> fib.next() 2 >>> [fib.next() for i in range(10)] [3, 5, 8, 13, 21, 34, 55, 89, 144, 233] >>>
该函数将返回一个特殊的迭代器,也就是generator对象,它知道如何保存执行环境。对它的
调用是不确定的,每次都将产生序列中的下一个元素。
生成器对降低程序复杂性很有帮助:
>>> def power(values): ... for value in values: ... print 'powering %s' % value ... yield value ... >>> def adder(values): ... for value in values: ... print 'adding to %s' % value ... if value % 2 == 0: ... yield value + 3 ... else: ... yield value + 2 ... >>> elements = [1, 4, 7, 9, 12, 19] >>> res = adder(power(elements)) >>> res.next() powering 1 adding to 1 3 >>> res.next() powering 4 adding to 4 7
Python引入的与生成器相关的最后一个特性是提供了与next方法调用的代码进行交互的
功能。yield将变成一个表达式,而一个值可以通过名为send的新方法来传递:
>>> def psychologist(): ... print 'Please tell me your problems' ... while True: ... answer = (yield) ... if answer is not None: ... if answer.endswith('?'): ... print ("Don't ask yourself too much questions") ... elif 'good' in answer: ... print "A that's good, go on" ... elif 'bad' in answer: ... print "Don't be so negative" ... >>> free = psychologist() >>> free.next() Please tell me your problems >>> free.send('I feel bad') Don't be so negative >>> free.send("Why i shouldn't ?") Don't ask yourself too much questions
send的工作机制与next一样,但是yield将变成能够返回传入的值。因为,这个函数可以
根据客户端代码来改变其行为。同时,还添加了throw和close两个函数,以完成该行为。
它们将向生成器抛出一个错误:
throw允许客户端代码传入要抛出的任何类型的异常;
close的工作方式是相同的,但是将会抛出一个特定的异常----GeneratorExit,在
这种情况下,生成器函数必须再次抛出GeneratorExit或StopIteration异
常。
>>> def my_generator(): ... try: ... yield 'something' ... except ValueError: ... yield 'dealing with the exception' ... finally: ... print "ok let's clean" ... >>> gen = my_generator() >>> gen.next() 'something' >>> gen.throw(ValueError('mean mean mean')) 'dealing with the exception' >>> gen.close() ok let's clean >>> gen.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
生成器表达式:
>>> iter = (x**2 for x in range(10) if x % 2 == 0) >>> for e1 in iter: ... print e1 ... 0 4 16 36 64 >>> iter.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> iter = (x**2 for x in range(10) if x % 2 == 0) >>> iter.next() 0 >>> iter.next() 4
这种表达式常被称为生成器表达式或genexp。每当在yield表达式上创建简单的循环时,
都应该使用它,或者用它来代替表现类似迭代器的列表推导。
发表评论
-
列表解析和生成器表达式
2012-06-06 08:14 1477列表解析: 括在方括号 >& ... -
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2012-03-06 22:10 59354转自: http://www.jb51.net/article ... -
Django Meta内部类选项
2012-03-06 00:13 1634转自:http://www.onepub.net/2012/0 ... -
python --- locals()函数
2012-03-02 12:21 1491>>> help(locals) Hel ... -
python __file__ 与相对路径
2012-03-02 11:45 1504转自:http://taoyh163.blog.163.com ... -
python最常用函数
2012-03-02 10:51 6606转自:http://blog.163.com/yang ... -
Python ---- 处理Excel
2012-02-25 12:17 15581. Ubuntu下相关的库的安装: $ sudo ap ... -
python --- Python中的callable 函数
2012-02-25 11:41 8390转自: http://archive.cnblogs. ... -
Python --- __call__ (可调用对象)
2012-02-25 11:41 2165转自: http://hi.baidu.com/feng221 ... -
Python---很强悍的property,绝对的强大
2012-02-25 11:41 28910转自:http://www.cnblogs.com/lovem ... -
什么是po文件?
2012-02-25 11:40 2380转自: http://hi.baidu.com/gre ... -
Python----很强悍的API
2012-02-21 15:26 7181. Python 自带的 gettext 标准模块 & ... -
python ---- 包中的__init__.py具体用法
2012-02-21 10:51 2507The __init__.py files are requi ... -
Python ---- 各种包的收集
2012-02-21 10:52 10121. psutil 是一个 Python模块用来获取正 ... -
Python---我还不知道的寻找他用法的地方
2012-02-21 10:52 10101. exec exec('xx') 可以直接执行xx ... -
Python ---- Sets
2012-02-20 13:06 943Python also includes a data typ ... -
Python---Tuple special characteristics
2012-02-20 10:27 1110A special problem is the constr ... -
python 如此灵活的使用filter, map, reduce, sum
2012-02-18 12:22 2686Functional Programming Tools T ... -
Python表示队列
2012-02-18 11:57 1236It is also possible to use a li ... -
这么酷的lambda用法
2012-02-18 11:12 1046Lambda Forms By popular demand ...
相关推荐
QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT皮肤生成器QT...
迷宫生成器1.0 迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫生成器1.0迷宫...
java ID生成器工具类 java ID生成器工具类java ID生成器工具类 java ID生成器工具类java ID生成器工具类 java ID生成器工具类java ID生成器工具类 java ID生成器工具类java ID生成器工具类 java ID生成器工具类java ...
《C#代码生成器详解与应用》 C#代码生成器是一种高效开发工具,它能够帮助程序员快速生成符合特定需求的C#源代码,极大地提高了编程效率和代码质量。在.NET框架下,C#作为主要的开发语言,其代码生成器的作用显得尤...
长微博生成器电脑版是一款可以在微博上发布长篇大论的工具,能帮做用户把长文章生成图片,有需要把文章生成图片的都可以使用长微博生成器,简单操作即可帮你完成,速度快可直接上传微博。 长微博生成器电脑版简介 发...
LCD字库生成器是一款专为液晶显示器(LCD)设计的工具,用于创建和管理自定义的字符库。在嵌入式系统和物联网设备中,LCD显示通常需要特定的字库来呈现文字信息。这款生成器可以帮助开发者根据需求生成适配LCD屏幕的...
微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码生成器 (源码)微信小程序 二维码...
asp.net 代码生成器 【基本说明】 1、能够生成三层模式操作的所有后台代码,简单的SQL Server 2005数据库操作。 2、生成的代码包括了 MODEL、BLL、DAL、DBHelper、Config 生成的代码内有详细注释可提供参考。 ...
微信小程序 小程序页面生成器 (源码)微信小程序 小程序页面生成器 (源码)微信小程序 小程序页面生成器 (源码)微信小程序 小程序页面生成器 (源码)微信小程序 小程序页面生成器 (源码)微信小程序 小程序页面生成器 ...
人人代码生成器是一款高效实用的工具,主要用于自动化代码编写过程,极大地提高了开发人员的生产力。在软件开发领域,代码生成器扮演着至关重要的角色,它能够根据预设的模板或模型自动生成符合特定规范的源代码,...
关于压缩包中的"51CTO下载-组织机构代码生成器",这可能是指在51CTO网站上可以下载到的特定版本的代码生成器软件。51CTO是中国一个知名的IT技术交流平台,提供各种软件下载、技术教程和论坛讨论服务。下载这款工具后...
MyBatis 代码生成器是一款高效实用的工具,旨在帮助开发者自动创建常见的CRUD操作代码,从而节省在数据库交互上花费的时间,提高开发效率。它支持多种数据库,包括Oracle和MySQL,这意味着无论你使用哪种数据库,都...
在电子显示领域,16点阵字模生成器是一个非常实用的工具,尤其对于制作电子广告牌、LED显示屏等需要显示汉字的设备来说。这个生成器可以将汉字转化为16*16像素的图形,也就是16点阵字模。16点阵是一种常见的字符表示...
【CSharp C#代码生成器】是一个强大的工具,专为C#开发者设计,旨在提高开发效率,尤其是在处理大量数据操作和界面构建时。这个代码生成器可以自动生成用于Web应用程序和Windows Forms(Winform)应用的C#代码,极大...
淘宝快递单号生成器2.0是一款专门设计用于模拟生成淘宝平台上的快递单号的工具。在电商行业中,每个订单都会关联一个独特的快递单号,以便于跟踪包裹的物流状态。这款生成器可以帮助用户快速创建测试数据,尤其对于...
代码生成器是一种强大的工具,它能够自动生成符合特定规范或模式的源代码,极大地提高了开发效率,降低了程序员的重复劳动。在IT行业中,代码生成器的应用广泛,尤其在大型项目或者需要大量标准化代码的场景下,如...
《Asp.net(C#)代码生成器源码详解》 在软件开发过程中,代码生成器是一种提高效率的重要工具,尤其在Asp.net(C#)框架下,它能够自动生成大量基础代码,帮助开发者快速构建应用的骨架。本文将深入探讨Asp.net(C#)...
情书生成器是一种基于人工智能技术的应用程序,它能够根据用户输入的信息自动生成具有情感色彩的信件,通常用于表达浪漫的情感。在当前数字化时代,情书生成器利用自然语言处理(NLP)和机器学习算法,帮助那些不...
在IT行业中,短信内容生成器是一种实用工具,主要用于自动化生成短信文本,特别是在企业或服务提供商中,例如中国电信的无线工位。这样的工具可以显著提高工作效率,减少人为操作的错误,同时能够快速响应大规模的...