- 浏览: 2160357 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (401)
- Agile (16)
- Apache Commons (3)
- Architecture (8)
- DB.MongoDB (5)
- DB.Mysql (3)
- DB.Oracle (34)
- DirectoryService (1)
- DotNet (1)
- English (3)
- Groovy (0)
- Html (28)
- Java (67)
- Java.Aixs (7)
- Java.Cache (2)
- Java.jPBM (1)
- Java.Resin (6)
- Java.Spring (4)
- Java.Struts2 (5)
- Java.Tomcat (16)
- Javascript (45)
- Javascript.Google Map (2)
- Javascript.Jquery (8)
- Life (15)
- Maven&Ant (4)
- Network (5)
- OS.Linux (45)
- OS.Windows (10)
- OS.Windows.Office (1)
- PlayFramework (15)
- Python (28)
- Reading notes (11)
- Security (13)
- Server.Apache (3)
- Server.Nginx (7)
- Test (6)
- Tool (15)
- Work.Solution (15)
- Other (20)
- SSO&CAS&Identity (13)
最新评论
-
hutuxiansheng123:
防火墙、Iptables、netfilter/iptables、NAT 概述 -
dacoolbaby:
非常棒的正则表达式,非常适用。万分感谢。
用python分析nginx的access日志 -
loot00:
您好! 我也遇到了相同的错误信息。我是用f_link_lob ...
LOB variable no longer valid after subsequent fetch -
feihangchen:
@OnApplicationStop public clas ...
Play framework 1.2.3 Jobs定时任务、异步任务、引导任务、触发任务、关闭任务 -
洞渊龙王:
谢谢了
www.w3.org被qiang导致logback报错:Connect reset
generator产生器:a Python generator is a kind of Python iterator[1], but of an especially powerful kind.
yield生产:可以解读为"返回然后等待"。知道所有yield语句完成,这时如果再次调用next(),则发生StopIteration异常,当然,在for循环之类的语句中会被自动处理。
return:"返回并结束"
generator归根到底是一个函数的返回值,这个函数是包含“yield”关键字的python函数。
是不是可以这么说(不是很确定,似乎可以这么理解)
1,凡包含“yield”关键字的函数,都返回generator
2,generator不是函数,而是函数执行后构造的对象,是一种iterator。
3,generator可以像iterator一样的用。
generator的根源是PEP 255,其中列出了generator在Python存在的原因,简单的讲,Generator在需要时返回中间值,能够保存当前的状态,等待下一次的返回要求。
xrange/range的区别或许可以帮我们理解这一点,xrange之所以存在,是因为range需要一次完成列表的初始化,存储等等,从C的角度来
理解,就是,用range等于先malloc足够的内存,然后完成值的准备,等待调用(遍历等等)。而xrange则不这么干,什么时候要的时候,什么时
候给值。所以,在Python
2.x中,type(range(10))是一个List,是内存中的静态数据;而type(xrange(10))则是一个range type。
到Python 3.x,xrange彻底替代了range函数。
这样设计的目的无非就是节省内存 ,千八百数字的无所谓,但ython 2.x的long int和Python 3.x的Int是无限制(用官方语言来说就是可以占满内存)。
generator为了满足这种需求设计的,状态得到了保存,随取随算。
PEP 255有一句: a Python generator is a kind of Python iterator[1], but of an especially powerful kind.
Python的产生器就是一种迭代器...
因为它是一种迭代器,所以,他可以用到for等控制流中。
def gen():
print "one"
yield 1
print "two"
yield 2
print "three"
yield 3
type(gen)
type(gen())
可以看到gen是函数,而gen()是generator,应该说,函数gen执行的返回值是生成一个generator。
generator的方法之一就是next()。
a=gen()
a.next()
a.next()
a.next()
a.next()
三次next,分别返回了1,2,3,最后一次,已到达末尾,发生StopIteration错误。
而yield的作用就是,每次发生next()调用,函数执行完yield语句之后在挂起,这时返回yield的值(你原因yield啥就yield啥),整个函数状态被保存,等待下一次next()调用;
下次next()调用发生时,从yield后的语句开始执行(有yiled也在循环体内,未必一定是顺序的),直到再次遇到yield为止,然后重复删除动作。
yield 可以解读为"返回然后等待"。知道所有yield语句完成,这时如果再次调用next(),则发生StopIteration异常,当然,在for循环之类的语句中会被自动处理。
<--- XDICT英汉辞典 --->
yield
[jiːld]
n. 生产量,投资收益
vt. 生产,给予,同意,被迫放弃,放纵
vi. 出产,屈服,投降
在这里,当然是“生产”的意思。
PEP 255详细解释了为什么是"新关键字" yield,而不是return 变体等等的原因。
我想,一个简单的原因可能是return已经被大家清楚、牢靠的理解成了"函数的结束并返回“,而不是”返回并挂起“。
摘自:http://bbs.paulau.com.cn/redirect.php?tid=9&goto=lastpost&sid=fJFtF0
转自:http://hi.baidu.com/izouying/blog/item/d70b098200db2daa0cf4d2d1.html
发表评论
-
python sftp&ftp&ssh2
2012-03-06 11:29 10843ftp使用内置模块from ftplib import FTP ... -
python 子进程Subprocess & windows cmd当前目录和python当前目录的区分
2012-03-05 10:28 10959maven命令执行的时候,需要先到project目录,然后再执 ... -
用python分析nginx的access日志
2011-04-13 13:52 15074项目正式发布后,有需求要分析下nginx的access日志内容 ... -
(转)python 函数参数的传递(参数带星号的说明)
2011-03-18 15:09 1407转自 andylin02的博客 python中函数参数的传递 ... -
ConfigParser读取记事本修改后的配置文件出错问题解决
2010-12-23 10:42 13160使用ConfigParser来读取系统配置文件,当把py2ex ... -
把图片列表合成一个GIF动画图片
2010-12-14 10:04 2604import os from PIL import Im ... -
LOB variable no longer valid after subsequent fetch
2010-12-01 10:50 5551cx_oracle读取oracle wm_concate函数操 ... -
pydev打包后的程序运行报【没有找到 MSVCP71.dll】的错误
2010-11-19 11:44 1767今天把用pydev打包后的程序放到一台新的Windows 20 ... -
客户端机器TCP端口被占满导致mysql报Can't connect to MySQL server on 'computername' (10048)
2010-11-17 16:22 5602用python程序读取csv数据,然后通过MySQLdb模块插 ... -
Python WindowsError
2010-10-28 10:02 11144WindowsError: [Error 2] The sy ... -
PIL使用过程中的异常处理
2010-10-22 14:45 19543IOError: cannot identify image ... -
用python给文件夹下所有图片进行缩放处理
2010-10-20 17:17 6165#! /usr/bin/env python # -* ... -
http代理测速程序
2010-10-18 16:45 6408从网上找到很多代理地址,用来访问目标网站,访问目标网站速度不一 ... -
python连接oracle
2010-09-29 13:39 8240windows下使用python连接oracle(10.2.0 ... -
python处理csv数据
2010-09-26 15:33 37278import csv #从文件读取 reader ... -
python文件夹复制
2010-09-25 14:58 5337需求:复制1个10多个G的文件夹(另外机器共享过来的文件夹,里 ... -
windows下python包chardet安装说明&python第三方包安装卸载
2010-09-19 10:59 2650BeautifulSoup使用过程中需要使用到chardet来 ... -
用py2exe安装python windows服务
2010-09-17 16:29 5926使用模块:pywin32,py2exe #运行安装程序 ... -
python gc回收和性能优化
2010-09-11 20:31 2944psyco 脚本的执行效率多少有点差强人意,虽然优化 ... -
pydev插件配置
2010-09-07 17:08 2683通过 Eclipse 插件下载功能安装完成后, Pyde ...
相关推荐
在Python编程中,生成器(generator)和yield表达式是两个非常重要的概念,它们是迭代器协议的实现方式之一,使得程序员能够以更加高效和节省内存的方式处理数据流。 首先,我们来了解迭代器(Iterator)和可迭代...
Python中的`yield`关键字和Generator是编程中一种高效、内存友好的数据生成方式。Generator是一种特殊的迭代器,它可以通过`yield`语句在运行时生成值,而不是一次性生成所有值。这种方式使得Generator可以在需要时...
Python中的`yield`关键字和Generator函数是Python编程中一种高效且节省内存的机制,它们用于创建迭代器。本文将深入探讨`yield`的工作原理以及如何使用Generator函数。 首先,让我们理解`yield`的关键作用。在普通...
在Python中,`yield`函数是生成器(generator)的核心组成部分,它允许函数成为一个可迭代的对象,而不是一次性返回所有结果。生成器是一种特殊的迭代器,它们不会立即计算所有的值,而是根据需要在运行时逐个生成。...
生成器和`yield`关键字是Python中非常重要的概念,掌握它们可以帮助开发者编写出更加优雅和高效的代码。 总之,在Python中使用`yield`创建生成器是一种非常有效的方法来处理大量数据或需要按需生成数据的情况。通过...
初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到底用来做什么,为什么要设计 yield ?本文将由浅入深地讲解 yield 的概念和...
今天在看其他同事的代码时,发现一个没使用过的python关键字 :yield 先问了一下同事,听他说了几句,有个模糊的印象,... 你看到某个函数包含了yield,这意味着这个函数已经是一个Generator,它的执行会和其他普
Python中的`yield`关键字是其语法的一大特色,它在生成器(Generator)中扮演着核心角色。生成器是一种特殊的迭代器,它允许我们定义一个函数,该函数可以在执行过程中暂停并保存状态,以便下次调用时能从暂停的地方...
另一方面,`yield`关键字在Python中用于生成器(generator)函数,它返回一个生成器对象,该对象能够记住函数当前的执行状态,之后能够从上次离开的位置继续执行。每次遇到`yield`时,函数生成一个值并暂停执行,...
在Python编程语言中,`yield`关键字是用来创建生成器(generator)的重要工具,它与`return`类似但有所不同。生成器是一种特殊的迭代器,能够节省内存资源,因为它们不一次性生成所有值,而是按需生成。这篇文档主要...
在Python编程语言中,`yield`关键字是一种特殊的功能,它被用于创建生成器(generator)。生成器是一种特殊的迭代器,可以动态地生成值,而无需一次性加载所有数据。这种特性在处理大量数据或无限序列时非常有用,...
3. **生成器(Generator)**:一种特殊的迭代器,由带有`yield`关键字的函数创建。生成器函数不会立即执行其内部代码,而是返回一个可以迭代的对象。每当调用`next()`或`send()`方法时,函数从上次暂停的位置继续执行...
Python中的`yield`和`generator`是编程语言中一种高效且节省内存的机制,它们主要用于创建迭代器。本文将深入探讨这两个概念以及如何在Python中使用它们。 首先,生成器是一种特殊的迭代器,它能够在运行时动态生成...
`yield` 是 Python 中的一个强大特性,主要用于创建生成器(generator)。生成器是一种特殊的迭代器,它允许我们像列表那样迭代值,但并不需要一次性将所有值加载到内存中。与普通的函数不同,`yield` 关键字使得...
在Python编程语言中,`return` 和 `yield` 都是用来在函数中返回值的关键字,但它们之间存在显著的区别,这些差异对于理解和编写高效的代码至关重要。 首先,`return` 关键字用于从函数中返回一个值。当 `return` ...