python生成器generator的用法

python scott 133℃ 0评论

在python中如何使用generator生成器,下面将会介绍python生成器的使用方法以及技巧:

本文实例讲述了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生成器generator的用法就是这样,欢迎大家参考。。。。

转载请注明:osetc.com » python生成器generator的用法

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址