python的yield语法基础
2012-05-09 11:30
956 查看
生成器总结:
最普通的例子:
每次调用next都会返回yield后面表达式的值,直到遇到下一个yield语句为止。
复杂一点的例子:
更复杂的例子:
最普通的例子:
>>> def h(): ... yield 1 ... yield 2 ... yield 3 ... >>> c = h() >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
每次调用next都会返回yield后面表达式的值,直到遇到下一个yield语句为止。
复杂一点的例子:
>>> def h(): ... print '111' ... yield '+111' ... print '222' ... yield '+222' ... print '333' ... yield '+333' ... # c是生成器 >>> c = h() # 111是print出来的,而+111是yield返回的,这时yield执行完了第一个yield并暂停。 # 直到接受到下一个next() >>> c.next() 111 '+111' >>> c.next() 222 '+222' >>> c.next() 333 '+333' # 因为h()已经是一个生成器函数,当所有yield都执行完毕之后,再调用next()就会引发StopIteration错误。 >>> c.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> >>> c = h() # 111是print的返回值,而x是yield的返回值 >>> x = c.next() 111 >>> x '+111' >>> y = c.next() 222 >>> y '+222' >>> z = c.next() 333 >>> z '+333'
更复杂的例子:
>>> def h(): ... print 'enter yield!' #1 ... m = yield 123 #2 ... print m #3 ... d = yield 456 #4 ... print d #5 ... print 'leave yield!' #6 ... >>> c = h() # c是一个生成器,因为python认为h()则是一个生成器函数,不是一个普通函数。 >>> a = c.next() # 往下执行代码,直到遇到yield为止,会返回yield的值 enter yield! # 这里的'enter yield!'是执行#1打印的,因为要运行到#2,所以必须要打印这一行 >>> a # 而#3返回了yield后面表达式的值 123 >>> b = c.next() # 再次调用next()执行到了#4,返回了yield的值。 但是yield的总的返回值总是None,所以返回了None. None >>> b # 但是b的值是yield返回的,是456 456
相关文章推荐
- Python3 与 C# 基础语法对比(Function专栏)
- Python基础语法 编码,字符集
- python基础学习,基础语法总结
- Python 语法基础
- Python3 学习笔记2_基础语法_20180210
- python学习日记2--基础语法篇
- python学习基础linux基本语法1
- Python3基础语法
- Python 3中的yield from语法详解
- Python基础语法1
- Python学习笔记——语法基础
- python学习1-基础语法
- Python 基础语法(二)
- Python语法基础(一)
- python 基础(一)基本语法
- Python 基础语法
- Python基础语法-常量与变量
- python基础语法(5) 赋值技巧
- Python基础语法
- Python基础学习之语句和语法