zoukankan      html  css  js  c++  java
  • 迭代器和生成器简单介绍

    迭代器和生成器
    Python装饰器:
        定义:本质是函数,用来装饰其他函数,为其他函数添加附加功能
        原则:1、不能修改被装饰的函数的源代码
        2、不能修改被装饰的函数的调用方式
    实现装饰器的知识储备
    1、函数即变量
    2、高阶函数
    3、嵌套函数
    高阶函数+嵌套函数-->装饰器
    嵌套函数实例:
        x=0
        def grandpa():
            x=1
            def dad():
                x=2
                def son():
                    x=3
                    print(x)
                son()
            dad()
        grandpa()
        #最终的输出结果是3
    装饰器实例: example1: #coding=utf-8 #Author:colby import time def timer(fun):#timer(test1) func=test1 def col(*args,**kwargs): print('in then col1') fun(*args,**kwargs) print('in then col2') return col @timer# test2 = timer(test2) = deco test2(name) =deco(name) def test1(name,age): time.sleep(1) print(name,age) test1('colby add new function!',30) 运行结果: in then col1 in the test1 colby add new function! in then col2
    example2: import time user,passwd="colby","abc123" def auth(func): def wrapper(*args,**kwargs) username=input("Username:").strip() password=input("Password:").strip() if user==username and passwd=password: print("33[32:1mUserhas passed authentication33[0m") #此处不加return,则函数不返回结果 #func(*args,**kwargs) return func(*args,**kwargs) else: exit("33[31:1mUserhas passed authentication33[0m") return wrapper def index1(): print("welcome to index page!") def index2(): print("welcome to index page!") def index3(): print("welcome to index page!") #函数调用 @auth(auth_type="local") index1() @auth(auth_type="ldap") index2()
    列表生成式 [i*2 for i in range(0,10)] 已经生成,占用内存空间
    生成器:generater 一、(i*2 for i in range(0,10)) 产生算法,无实际数据,不占用内存空间 总结:1、只有在调用时才会生成相应的数据 2、只记录当前位置 3、只有一个__next__()方法,2.7是next()方法 二、带yield的生成器
    迭代器Iterator 凡是可作用于for循环的对象都是Iterable类型 凡是可作用于__next__()方法就是迭代器 生成器一定是迭代器,迭代器不一定是生成器 list、dict、str等Iterator属于迭代对象,通过iter()方法 可以变成迭代器 range(10),xrange(10)也是迭代器
  • 相关阅读:
    javaScript系列---【js中获取元素的方式】
    javaScript系列---【js运算符类型】
    javaScript系列---【数据类型的强制转换】
    javaScript系列---【解析js基本数据类型】
    javaScript系列---【操作元素样式】
    Typora系列---【Typora常用快捷键】
    nyoj--239--月老的难题(最小点覆盖)
    nyoj--284--坦克大战(bfs模板)
    hdoj--3339--In Action(最短路+01背包)
    hdoj--2015--偶数求和(水题)
  • 原文地址:https://www.cnblogs.com/wcin/p/8906113.html
Copyright © 2011-2022 走看看