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()

  一个最简单的装饰器

 

posted @ 2016-12-30 16:46  nerdlerss  阅读(150)  评论(0编辑  收藏  举报