• 生成器,推导式


    生成器

    生成器的本质就是迭代器

    通过函数变成一个生成器

     1 def func():
     2     print(1)
     3     yield 5  # 我的函数走到这了
     4     print(2)
     5     yield 9  # 我的函数走到这了
     6 
     7 g = func()  # 生成一个生成器
     8 
     9 print(g.__next__())
    10 print(g.__next__())
    11 print(list(range(10000)))
    每次遇到yield会返回并标记
    下次从yield下面的函数开始运行
    一共只有一个生成器
    1 def func():
    2     print(1)
    3     # return 5
    4     yield 5
    5 print(func().__next__())  # 这样生成一个生成器
    6 print(func().__next__())  # 这样生成一个生成器
    7 print(func().__next__())  # 这样生成一个生成器
    8 print(func().__next__())  # 这样生成一个生成器
    9 print(func().__next__())  # 这样生成一个生成器
    遇到yield就返回 再次打印还是从头开始 每次打印都生成一个新的生成器

    函数遇到return就结束 遇到yield不结束就挂起 

    yield作用 挂起 返回值 接受值

    生成器一定是一个迭代器 迭代器不一定是生成器

    生成器是可以让程序员自己定义的一个迭代器

    生成器的好处 可以节省空间

    生成器的特性 一次性的 惰性机制 从上到下

    send 相当于 next + 传的值 第一次接触生成器时,如果要用send  send的值必须是None  一般建议使用__next__

    yield from 将可迭代对象元素挨个返回

    python2 3x 版本操作区别

    python2 iter() next()

    python3 iter() next() __next__() __iter__()

    推导式

    列表推导法 [结果 语法]  [ ] 是容器

    集合推导法 [结果 语法}

    字典推导法 {键:值 语法}

    没有元组的推导式

    看着像元组的推导式 其实是一个生成器推导式 

    推导器可以节省代码

    推导式不宜太长 可读性差

    外部需要容器包一下 里边第一个位置是结果 剩下的是语法 每个间隔用空格隔开

     

  • 相关阅读:
    053518
    Ubuntu 20.04, 19.10 or 19.04出现libqtgui4 : Depends: libpng120 (>= 1.2.134) but it is not installed
    Ubuntu下安装最新OpenJdk1.8
    c#_FFMPEG使用心得(推流与拉流)
    [WPF 自定义控件]简单的表单布局控件
    WPF调用图片路径,或资源图片
    WPF中的数据模板(DataTemplate)
    MahApps.Metro 官方文档
    MahApps.Metro 图标
    WPF简单导航框架(Window与Page互相调用)
  • 原文地址:https://www.cnblogs.com/biulo/p/10542957.html
Copyright © 2020-2023  润新知