加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python高级特性--生成器

发布时间:2020-12-20 12:46:39 所属栏目:Python 来源:网络整理
导读:通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 #要创建一个genera

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

#要创建一个generator,第一种只要把一个列表生成式的[]改成(),就创建了一个generator:
L = [x*x for x in range(1,11)]
print(L)
l = (x*x for x in range(1,11))
print(l)
#[1,4,9,16,25,36,49,64,81,100]
#<generator object <genexpr> at 0x00000133B2F035E8>
#L是一个list,而g是一个generator

斐波拉契数列

def fib(max):
    n,a,b = 0,1
    while n < max:
        print(b)
        a,b = b,a + b
        n = n + 1
    return 'done'

#要把fib函数变成generator,只需要把print(b)改为yield b就可以
def fib(max):
    n,1
    while n < max:
        yield b                 #generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
        a,a + b
        n = n + 1
    return 'done'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读