zoukankan      html  css  js  c++  java
  • 迭代器,生成器,装饰器

    闭包 : 内部函数使用外部函数的变量
    # 装饰器
    # 开发原则 : 开放封闭原则
    # 装饰器的作用 :在不改变原函数的调用方式的情况下,在函数的前后添加功能
    # 装饰器的本质 : 闭包函数

    # def wrapper(func):
    # def inner(*args,**kwargs):
    # print('在被装饰的函数执行之前做的事')
    # ret = func(*args,**kwargs)
    # print('在被装饰的函数执行之后做的事')
    # return ret
    # return inner
    #
    # @wrapper #holiday = wrapper(holiday)
    # def holiday(day):
    # print('全体放假%s天'%day)
    # return '好开心'
    #
    # ret = holiday(3)
    # print(ret)

    # 只要是能被for循环的数据类型 就一定拥有__iter__方法
    # print([].__iter__())
    # 一个列表执行了__iter__()之后的返回值就是一个迭代器
    # Iterable 可迭代的 -- > __iter__ #只要含有__iter__方法的都是可迭代的
    # [].__iter__() 迭代器 -- > __next__ #通过next就可以从迭代器中一个一个的取值
    # 只要含有__iter__方法的都是可迭代的 —— 可迭代协议
    迭代器的概念
    # 迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器

    # 迭代器协议和可迭代协议
    # 可以被for循环的都是可迭代的
    # 可迭代的内部都有__iter__方法
    # 只要是迭代器 一定可迭代
    # 可迭代的.__iter__()方法就可以得到一个迭代器
    # 迭代器中的__next__()方法可以一个一个的获取值

    # for循环其实就是在使用迭代器 直接给你内存地址# print([].__iter__())
    # print(range(10))
    #for
    #只有 是可迭代对象的时候 才能用for
    #当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代

    #迭代器的好处:
    # 从容器类型中一个一个的取值,会把所有的值都取到。
    # 节省内存空间
    #迭代器并不会在内存中再占用一大块内存,
    # 而是随着循环 每次生成一个
    # 每次next每次给我一个
    生成器 —— 迭代器
    # 生成器函数 —— 本质上就是我们自己写得函数
    #只要含有yield关键字的函数都是生成器函数
    # yield不能和return共用且需要写在函数内
    #生成器函数 : 执行之后会得到一个生成器作为返回值
    #send 获取下一个值的效果和next基本一致
    #只是在获取下一个值的时候,给上一yield的位置传递一个数据
    #使用send的注意事项
    # 第一次使用生成器的时候 是用next获取下一个值
    # 最后一个yield不能接受外部的值

    # 迭代器
    # 可迭代协议 —— 含有iter方法的都是可迭代的
    # 迭代器协议 —— 含有next和iter的都是迭代器
    # 特点
    # 节省内存空间
    # 方便逐个取值,一个迭代器只能取一次。
    # 生成器 —— 迭代器
    # 生成器函数
    # 含有yield关键字的函数都是生成器函数
    # 生成器函数的特点
    #调用之后函数内的代码不执行,返回生成器
    #每从生成器中取一个值就会执行一段代码,遇见yield就停止。
    #如何从生成器中取值:
    # for :如果没有break会一直取直到取完
    # next :每次只取一个
    # send :不能用在第一个,取下一个值的时候给上个位置传一个新的值
    # 数据类型强制转换 :会一次性把所有数据都读到内存里
    # 生成器表达式
    # (条件成立想放在生成器中的值 for i in 可迭代的 if 条件)

  • 相关阅读:
    vue---echarts图表
    路由嵌套
    VoIP语音通话研究【进阶篇(四):freeswitch+webrtc+sip.js的通话】
    VoIP语音通话研究【进阶篇(三):opensips安装】
    如何在北京退休?
    后端分析/前端分析/边缘分析
    使用curl批量下载图片
    pytorch固定随机种子复现实验结果
    分享一个作为面试官的面试思路
    两个流程链路问题的排查和总结
  • 原文地址:https://www.cnblogs.com/xyhh/p/10836344.html
Copyright © 2011-2022 走看看