本文实例讲述了python生成器generator用法。分享给大家供大家参考。具体如下:
使用yield,可以让函数生成一个结果序列,而不仅仅是一个值
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def countdown(n): print "counting down" while n> 0 : yield n #生成一个n值 n - = 1 >>> c = countdown( 5 ) >>> c. next () counting down 5 >>> c. next () 4 >>> c. next () 3 |
next()调用生成器函数一直运行到下一条yield语句为止,此时next()将返回值传递给yield.而且函数将暂停中止执行。再次调用时next()时,函数将继续执行yield之后的语句。此过程持续执行到函数返回为止。
通常不会像上面那样手动调用next(), 而是使用for循环,例如:
1
2
3
4
5
6
7
8
9
|
>>> for i in countdown( 5 ): ... print i ... counting down 5 4 3 2 1 |
next(), send()的返回值都是yield 后面的参数, send()跟next()的区别是send()是发送一个参数给(yield n)的表达式,作为其返回值给m, 而next()是发送一个None给(yield n)表达式, 这里需要区分的是,一个是调用next(),send()时候的返回值,一个是(yield n)的返回值,两者是不一样的.看输出结果可以区分。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def h(n): while n> 0 : m = ( yield n) print "m is " + str (m) n - = 1 print "n is " + str (n) >>> p = h( 5 ) >>> p. next () 5 >>> p. next () m is None n is 4 4 >>> p.send( "test" ) m is test n is 3 3 |
希望本文所述对大家的Python程序设计有所帮助。