zoukankan      html  css  js  c++  java
  • 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循环遍历取值 这样就不会抛出异常

  • 相关阅读:
    无法重用Linq2Entity Query
    The Joel Test
    MSBuilder directly instead of default VSComplie with keyborad shotcut 原创
    客户端缓存(Client Cache)
    关于代码重构和UT的一些想法,求砖头
    ExtJS2.0实用简明教程 应用ExtJS
    Perl information,doc,module document and FAQ.
    使用 ConTest 进行多线程单元测试 为什么并行测试很困难以及如何使用 ConTest 辅助测试
    史上最简单的Hibernate入门简介
    汽车常识全面介绍 传动系统
  • 原文地址:https://www.cnblogs.com/huikejie/p/10793188.html
Copyright © 2011-2022 走看看