• day14


    带参装饰器

    装饰器为被装饰的函数添加新功能,需要外界的参数 

    定义一个新函数def wrap(info)把装饰器嵌套在这个新函数里面 然后他的return 的结果就是装饰器外层的函数

    所以@warp(参数)等于@装饰器外层的函数

    系统的wraps带参装饰器:改变inner的假指向,本质外界使用的还是inner,但是打印显示的是wraps中的函数

    迭代器

    迭代器对象 可以不用依赖索引的取值容器  可以不依赖索引取值

    可迭代对象 可以通过方法得到迭代对象  只能从前往后依次取值

    可迭代对象

    有__iter__()的方法对象是可迭代对象 通过__iter__()调用可以得到迭代器对象

    迭代器对象

    有__next__的方法为迭代器对象 迭代器对象通过__next__来取值

    只能取一次一次取 当取完了就会报错StopIteration:

    for循环迭代器

    直接用while True循环在迭代器对象中通过__next__来取值 取空就报错

    然后for循环就是对while迭代器对象的一种封装 当取空时候 不会报错

    #for循环迭代器的工作原理:
    # for v in obj: pass
    # 1)获取obj.__iter__()的结果,就是得到要操作的 迭代器对象
    # 2)迭代器对象通过__next__()方法进行取值,依次将当前循环的取值结果赋值给v
    # 3)当取值抛异常,自动处理StopIteration异常结束取值循环

    枚举对象

    for v in enumerate

    就是可迭代对象以及迭代器对象添加索引

    通过索引与值为一个元组 被答应出来

    生成器

    自定义迭代器对象

    就是用函数语法来声明生成器 用yield 关键字来取代return关键字来返回值 参数没有多少变化

    有yield关键字的函数,函数名() 不是调用函数,而是生成得到 生成器对象,生成器对象就是迭代器对象,可以通过 __next__() 进行取值

    可以通过print函数名()来打印出yield关键字返回出来的值  从上到下 先得到第一个yield的返回值 然后第二个一次类推 如果没有yield则报错StopIteration

    当然可以用for循环遍历取值 这样就不会抛出异常

  • 相关阅读:
    【本人译作推荐】Windows 8应用开发:C#和XAML卷(原名:Building Windows 8 Apps with C# and XAML)
    ODAC的安装以及Entity Framework for Oracle 基本配置
    ExtJs API 下载以及部署
    ArcGis(01)——地图切片以及发布底图服务
    ubuntu下安装Vmare Workstation,并安装mac补丁
    sencha app build 到 Capturing theme image不执行
    Ext Sencha Cmd 6 环境安装
    SqlServer CTE 递归查询 Oracle递归查询
    ibatis.net调用oracle存储过返回游标SYS_REFCURSOR结果集
    SpringMVC从入门到精通之第四章
  • 原文地址:https://www.cnblogs.com/huikejie/p/10793188.html
Copyright © 2020-2023  润新知