python生成式和生成器

  1. 生成式和生成器
    通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理。语法格式为:

    [expfor val in collection if condition]
    li = [x*x for x in xrange(1,101) if x%2==0]
    print (li)
    #生成式类似于函数
    def funa():
        a = []
        for x in xrange(1,101):
            if x%2==0:
                a.append(x*x)
        return a
    print (funa())
    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。

    要创建一个列表生成器generator,有很多种方法。第一种方法是把一个列表生成式的[]改成(),就创建了一个generator:

    #列表生成器:方法1:将生成式的[]改成()
    a = (x*x for x in xrange(1,10) if x%2==0)
    print (a)
    print (type(a))
    print (a.next())
    print (a.next())
    print (a.next())
    print (a.next())
    定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
    def fib(n, yelid=None):
        sum = 0
        i = 0
        while(i<n):
            sum = sum +i
            i+=1
            yield sum
    for x in fib(10):
        print(x)
    print (fib(10))

  2. 迭代器
    列表生成式:一次性生成所有的数据,然后保存在内存中,适合少量的数据
    生成器返回一个可迭代的对象及generator对象,必须通过循环才可以一一取出所有的结果
    可迭代的对象:通过循环调用出来的,就是可迭代的对象[] {} ()
    迭代器 生成器 必须通过next()调用的,被next()调用并不断返回下一个值的对象称为迭代器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值