Python生成器、迭代器、装饰器

Python迭代器

迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。

迭代器不能回退,只能往前进行迭代。这并不是什么很大的缺点,因为人们几乎不需要在迭代途中进行回退操作。

常用的迭代方法有

.next()方法

for..in..方法

迭代器通俗的理解就是遍历集合内的所有元素

python生成器

这里先说简单的使用,然后再说自己创建生成器

range:生成一个list

range(1,5)
结果为:[1,2,3,4]

xrange:生成一个xrange的对象

xrange(5)
结果为:xrange(5)
list(xrange(1,5))
结果为:[1,2,3,4]
list(xrange(1,5,2))
结果为:[1,3]

range与xrange的不同在于range或直接生成整个序列,而xrange则是逐渐返回,迭代时返回。当需要迭代的数目过大,或者有中断时,使用xrange既能减少内存的使用,又能提高效率

python中含有yield的函数就是一个生成器(可能性很大)

yield其实和return差不多,只不过返回的是一个生成器

定义一个生成器

def nub():
  nub = range(1,5)
  for i in nub:
    yield i*i

可以利用type()查看函数nub的类型,在迭代(可使用next())的时候函数才会运行,而且函数每次运行后都会保持上一次运行的状态,当迭代结束的时候会报错

Python装饰器

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

摘用一下别人的代码

#-*- coding: UTF-8 -*-
import time
 
def foo():
    print 'in foo()'
 
# 定义一个计时器,传入一个,并返回另一个附加了计时功能的方法
def timeit(func):
     
    # 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装
    def wrapper():
        start = time.clock()
        func()
        end =time.clock()
        print 'used:', end - start
     
    # 将包装后的函数返回
    return wrapper
 
foo = timeit(foo)
foo()

函数foo被函数timeit装饰

原文地址:https://www.cnblogs.com/The-cup/p/4393737.html