zoukankan      html  css  js  c++  java
  • Python学习笔记-Day12

    内容大纲:

    一、生成器

    二、列表推导式、生成器表达式

    一、什么是生成器:

      生成器是自己用python代码写出的迭代器,其本质就是迭代器,包含__iter__和__next__功能

    二、如何产生生成器(两种方法)

    第一种方法:通过生成器函数,就是将函数种的return变为yield

    def func2(x):
        x += 1
        print(111)
        yield x
        x += 1
        print(222)
        yield x
    func2(2)#函数不会执行
    g_obj  =func2(3)#将func2(3)赋值给g_obj,g_obj是个迭代器
    #g_obj.__next__()#输出结果是111,一个next对一个一个yield,只有遇到next,函数才会执行
    print(g_obj.__next__())#输出结果是1114
    print(g_obj.__next__())#输出结果是2225

    1、return 与 yield的区别

    ① 自定制的区别

    ② 内存级别的区别

         迭代器是需要可迭代对象进行转化,可迭代对象非常占内存

        生成器是直接转化,从本质上节省内存

    def func1():
        for i in range(10):
            yield i
    g=func1()
    for I in range(10):
    print(g.__next__())

    2、send 与 next 的区别

    ① send 与 next 一样,也是对生成器进行取值

    ② send 可以给上一个yield 传值

    ③ 第一次取值只能用next

    ④ 最后一个yield永远得不到send传的值

    def func1():
        print(1)
        count = yield 1
        print(count)
        print(2)
        count2 = yield 2
        print(count2)
        print(3)
        count3 = yield 3
    g=func1()
    g.__next__()
    g.send('alex')
    g.send('hello')

    三、列表推导式、生成器表达式

    1、列表推导式:

    优点:一行代码几乎可以搞定所需要的任何列表

    缺点:容易着迷,不易排错,不能超过三个循环

    ① 循环模式:

    l=[I for I in range(1,101)]
    print(l)
            
    l1=['python%s期' % I for I in range(1,15)]
    print(l1)
            
    l2=[i*I for I in range(1,11)]
    print(l2)

    ② 筛选模式:

    l3=[I for I in range(1,31) if i%2 == 0]
    print(l3)
            
    l4=[I for I in range(31) if i%3 == 0]
    print(l4)
        
    l5=[i*I for i in range(31) if i%3 == 0]
    print(l5)
            
    names=[['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe'],['Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']]
    name=[str for names1 in names for str in names1 if str.count('e') == 2]
    print(name)

    2、生成器表达式:

    与列表推导式相同,只是将[ ]改为( )

    还有字典推导式、集合推导式这里不再一一赘述

  • 相关阅读:
    【转】以太坊分片:Overview and Finality
    Raiden Network — Ethereum 区块链支付通道
    ERC 和 EIP 代表什么呢?
    【转】什么是加密经济学
    Ethereum Probabilistic Micropayments
    【转】以太坊钱包分析与介绍
    【转】用Python从零开始创建区块链
    【转】用 Go 构建一个区块链
    通用权限管理系统组件 (GPM
    通用权限管理系统组件 (GPM
  • 原文地址:https://www.cnblogs.com/tian-tian/p/9507647.html
Copyright © 2011-2022 走看看