zoukankan      html  css  js  c++  java
  • 生成器,推导式

    生成器

    生成器的本质就是迭代器

    通过函数变成一个生成器

     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__()

    推导式

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

    集合推导法 [结果 语法}

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

    没有元组的推导式

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

    推导器可以节省代码

    推导式不宜太长 可读性差

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

     

  • 相关阅读:
    内置对象 和 DropDownList时间年月日的三级联动
    复合控件 ispostback 跨页面传值
    webform简单控件和Repeater的使用
    初步认识ASP.NET WebForm
    WinForm Timer控件,三级联动[省,市,区]
    进程 线程 用户控件
    窗体容器MDI
    对话框控件 MessageBox.Show()用法补充 打开新窗体的3中模式
    winform窗体移动和阴影API
    PS学习笔记
  • 原文地址:https://www.cnblogs.com/biulo/p/10542957.html
Copyright © 2011-2022 走看看