URN Logo
UNIX Resources » Linux » China Linux Forum » Python 编 程 » 13 » yield 语句是什么含义?
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
yield 语句是什么含义?
yield 语句是什么含义? - alula [2005-01-25 15:20 | 156 byte(s)]
 
Re: yield 语句是什么含义? - limodou [2005-01-25 21:10 | 370 byte(s)]
 
Re: yield 语句是什么含义? - alula [2005-01-26 09:19 | 1,848 byte(s)]
 
Re: yield 语句是什么含义? - passworld [2005-01-26 15:26 | 247 byte(s)]
 
Re: yield 语句是什么含义? - limodou [2005-01-26 11:03 | 34 byte(s)]
 
Subject: yield 语句是什么含义?
Author: alula    Posted: 2005-01-25 15:20    Length: 156 byte(s)
[Original] [Print] [Top]
在python代码中,看到如下语句,不知道yield含义,谢谢指教:

......
thread.start()
yield None

.........
----
三点一面
[Original] [Print] [Top]
Subject: Re: yield 语句是什么含义?
Author: limodou    Posted: 2005-01-25 21:10    Length: 370 byte(s)
[Original] [Print] [Top]
yield是2.3中增加的关键字,它用在generator生成函数中,用于产生iterator。我的一篇 blog 讲了关于interator和generator http://www.donews.net/limodou/archive/2004/07/10/40913.aspx
简单讲就是yield会保存此函数的状态,并返回结果。当下一次调用时继续从断点运行。
----
[Original] [Print] [Top]
Subject: Re: yield 语句是什么含义?
Author: alula    Posted: 2005-01-26 09:19    Length: 1,848 byte(s)
[Original] [Print] [Top]
谢谢limodou~
这个语言特性好特别,在其它编程语言似乎找不到与它相对应的了。

6.8 The yield statement

yield_stmt ::= "yield" expression_list
Download entire grammar as text.

The yield statement is only used when defining a generator function, and is only used in the body of the generator function. Using a yield statement in a function definition is sufficient to cause that definition to create a generator function instead of a normal function.

When a generator function is called, it returns an iterator known as a generator iterator, or more commonly, a generator. The body of the generator function is executed by calling the generator's next() method repeatedly until it raises an exception.

When a yield statement is executed, the state of the generator is frozen and the value of expression_list is returned to next()'s caller. By ``frozen'' we mean that all local state is retained, including the current bindings of local variables, the instruction pointer, and the internal evaluation stack: enough information is saved so that the next time next() is invoked, the function can proceed exactly as if the yield statement were just another external call.

The yield statement is not allowed in the try clause of a try ... finally construct. The difficulty is that there's no guarantee the generator will ever be resumed, hence no guarantee that the finally block will ever get executed.

Note: In Python 2.2, the yield statement is only allowed when the generators feature has been enabled. It will always be enabled in Python 2.3. This __future__ import statment can be used to enable the feature:

from __future__ import generators

----
三点一面
[Original] [Print] [Top]
Subject: Re: yield 语句是什么含义?
Author: limodou    Posted: 2005-01-26 11:03    Length: 34 byte(s)
[Original] [Print] [Top]
应该也有原型,不是python所特有的。
----
[Original] [Print] [Top]
Subject: Re: yield 语句是什么含义?
Author: passworld    Posted: 2005-01-26 15:26    Length: 247 byte(s)
[Original] [Print] [Top]
也叫 coroutine ,非常有用,在很多情况下可以实现多线程的效果但
是没有多线程的竞赛问题,但在其他很多地方无法替代多线程。感觉上
是一个cooperative multithreading,合作式多线程?

在比较丰富的语言里是有的。
[Original] [Print] [Top]
« Previous thread
有人用过pysnmp吗?
Python 编 程
13
Next thread »
欢迎大家加入QQ群4105562讨论PYTHON
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 04:11:21, cost 0.052805185317993 ms.