zoukankan      html  css  js  c++  java
  • python基础补漏-05-生成器和装饰器

    【1】生成器

     很难用简单的语言描述生成器。

    生成器:从字面上来理解,就是以某种规则为基础,不断的生成数据的工具

    生成器函数: 在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器函数。

    我们先举个例子

    def fib(max):  
        a, b = 1, 1  
        while a < max:  
            yield a
            a, b = b, a+b
    for i in fib(100):
        print i
    

       如果没有yield 那么这个函数中的内容可要执行很多此了,那么这个函数就像,抗日神剧里面鬼子使用的三八大盖。发射一发子弹后就不能发射了,必须重新装弹才能发射下一发

    在一个生成器中,如果没有return,则默认执行到函数完毕时返回StopIteration;

    而通常我们说 生成器的意义:通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 --借用雪峰大大的话

    【2】装饰器

    个人理解:--> 给其他一个方法或者多个方法,添加额外功能的方法

    def foo(arg):
      arg()
      print 'foo'
    
    def lala():
      print "lala"
    
    foo(lala)
    

     如上图所示 我们知道打印结果会是这样的

    因为 foo函数在执行的时候 会去调用lala函数的内容 

    如果你清楚上面的 我们再来看看装饰器 就很容易的

    def dec1(ins):
      def fun():
        return  ins()
      return fun
    
    
    @dec1
    def k1():
      print "xxxxxxxxx"
    
    k1()
    

      一个最简单的装饰器

  • 相关阅读:
    CRM
    eclipse 全局替换
    ps 泡泡
    SSH重新登录的问题
    又说oracle spatial 将Geometry转为gml
    其实你可以这样折腾java enum
    Sqlite 多线程入库
    Oracle spatial 将Geometry转换为gml字符串
    Oracle 关于WKT构造SDO_GEOMETRY的问题。
    Lucene之拉框查询
  • 原文地址:https://www.cnblogs.com/nerdlerss/p/6237544.html
Copyright © 2011-2022 走看看