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

    1,装饰器函数

    import time
    def timer(func):
    def inner():
    start = time.time()
    func()
    print(time.time() - start)
    return inner

    @timer #==> func1 = timer(func1)
    def func1():
    print('in func1')


    func1()

    装饰器——语法糖

    简单的总结一下:

      装饰器的本质:一个闭包函数

      装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

    2,可迭代对象: 

    拥有__iter__方法

      特点:惰性运算

      例如:range(),str,list,tuple,dict,set

    3,迭代器Iterator:

      拥有__iter__方法和__next__方法

      例如:iter(range()),iter(str),iter(list),iter(tuple),iter(dict),iter(set),reversed(list_o),map(func,list_o),filter(func,list_o),file_o

    生成器Generator:

      本质:迭代器,所以拥有__iter__方法和__next__方法

      特点:惰性运算,开发者自定义

    使用生成器的优点:

      1.延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用。

         2.提高代码可读性

    #列表解析
    sum([i for i in range(100000000)])#内存占用大,机器容易卡死
     
    #生成器表达式
    sum(i for i in range(100000000))#几乎不占内存
  • 相关阅读:
    洛谷5495:Dirichlet前缀和
    SP5971 LCMSUM
    洛谷1829:crash的数字表格
    洛谷3172:选数
    Codeforces 1295 D. Same GCDs
    洛谷3768:简单的数学题
    NTT学习笔记
    洛谷1169:棋盘制作(悬线法)
    洛谷2444:病毒
    后缀自动机
  • 原文地址:https://www.cnblogs.com/l-jie-n/p/9582366.html
Copyright © 2011-2022 走看看