• 生成器迭代器


    函数名  →  第一类对象

    函数可以复制

    函数可以作为集合类的元素

    函数可以作为参数传递

    函数可以作为返回值返回

    2,闭包

    语法: 内层使用外层函数的变量

    def wrapper():

      name = "周杰伦"

      def inner():

        print(name)

      return inner

    ret = wrapper()

    ret()

    如何查看一个函数是否是闭包

    函数名.__closure__有值就是闭包,none就不是闭包

    优点:

    1.保护变量不被侵害

    2.可以让一个变量常驻内存

    迭代器

    在数据中包含了__iter__是一个可迭代对象

    for循坏机制

    it= lst.__iter__()

    while 1:

      try:

        it__next__()

      except   StopIteration:

        break

    优点:

      1,节省内存

      2.,惰性机制

      3,只能向前,不能反复

    官方查看xxx是迭代器,可迭代对象

    from collections import iterable iterator

    isinstance(对象,iterable)

    isinstance(对象,iterator)

    迭代器一定是可迭代的

    可迭代的不一定是迭代器

    生成器

      生成器函数中包含yield:返回数据和return差不多

      return会立即结束这个函数的执行

      yield可以分段的执行一个函数

      生成器函数在执行的时候返回生成器,而不是直接执行

    能向下执行的两个条件

      __next__() 执行到下一个yield

      send(),执行到下一个yield 给上一个yield传值

    所有的生成器都是迭代器都可以直接使用for循环

    都可以使用list()函数来获取到生成器内所有的数据

    生成器中记录的是代码而不是函数的执行

    def func():

      print("我的天那")

      yield

    gen = func()  创建生成器,此时运行会把生成器函数中的代码记录在内存中

    当执行到__next__() 运行此空间中的代码运行到yield结束

    优点:节省内存,生成器本身就是代码,几乎不占用内存

    特点:惰性机制,只能向前,不能反复

  • 相关阅读:
    如何调试PHP程序
    Win10系统80端口被pid=4的System进程占用 -- 解决方法
    初用DataGrip,连接后看不到自己创建的数据库的问题
    AJAX实现跨域的三种方法
    Webstrom (或Phpstrom)使用git(oschina-码云)
    EXCEL 数字+E+数字 自动识别为指数形式的解决办法
    解决安装office2013时提示已安装相同版本的office
    将excel导入mysql(使用navicat)
    mysql按汉语拼音首字母排序
    SQL查询语句去除重复行
  • 原文地址:https://www.cnblogs.com/heheda123456/p/10104993.html
Copyright © 2020-2023  润新知