• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
火磷
Memory will fade,but not notes.
博客园    首页    新随笔    联系   管理    订阅  订阅
python中的生成器

1.简介

在Python中,生成器是一种边循环边计算的惰性机制,需要我们手动去提取这些元素。

2.示例

(表达式   循环体   条件语句)

注:列表生成式的[]改成(),就创建了一个generator.

1 >>> L1=[1, 2, 3, 4, 5, 6]
2 >>> g=(x*x for x in L1)
3 >>> g
4 <generator object <genexpr> at 0x0268E968>
5 >>> next(g)  #也可以使用g.next()
6 1
7 >>> next(g)
8 4

也可以直接使用循环(避免抛出错误): 

1 >>> for n in g:
2       print(n)

3.函数生成器

斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

函数:

1 def fib(max):
2     n, a, b = 0, 0, 1
3     while n < max:
4         print b
5         a, b = b, a + b
6         n = n + 1

计算结果:

1 >>> fib(4)
2 1
3 1
4 2
5 3

如何将上述函数编程生成器呢?方法如下:把print b改为yield b。

函数:

1 def fib(max):
2      n, a, b = 0, 0, 1
3      while n < max:
4          yield b
5          a, b = b, a + b
6          n = n + 1

计算结果:

 1 >>> f = fib(6)
 2 >>> f
 3 <generator object fib at 0x104feaaa0>
 4 >>> for n in fib(6):
 5 ... print(n)
 6 1
 7 1
 8 2
 9 3
10 5
11 8

 

posted on 2017-07-05 11:07  火磷  阅读(318)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3