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循环遍历取值 这样就不会抛出异常

  • 相关阅读:
    Retrofit源码分析
    Android异步消息机制
    崩溃bug日志总结3
    单例模式
    总结(第一段)
    mysql日期类型比较
    mysql记录(一)
    JSONObject/JSONArray的区别
    java 正则表达式(Pattern ,Matcher)的使用
    javaweb开发中的权限管理的方法
  • 原文地址:https://www.cnblogs.com/huikejie/p/10793188.html
Copyright © 2011-2022 走看看