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装饰

时间: 2024-10-09 15:57:37

Python生成器、迭代器、装饰器的相关文章

Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json & pickle 数据序列化

一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了.所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间.在Python中,这种一边循环一边计算的机制,称为生成器:generator. 要创建一个generator,有很多种

Python生成器、装饰器

## 生成器 - 生成器是用来创建Python序列的一个对象 - 通常生成器是为迭代器产生数据的 - 例如range()函数就是一个生成器 - 每次迭代生成器时,它都会记录上一次调用的位置,并返回下一个值,这使程序不需要创建和存储完整的序列 ## 生成器函数 - 生成器函数与普通函数类似,但它的返回值使用yield语句,而不是return 1 def my_range(start=0, last=10, step=1): 2 number = start 3 while number < las

python生成器、装饰器、正则

包子来了[4],被[mayun]吃了! 包子来了[4],被[mahuateng]吃了! 做了两个包子 包子来了[5],被[mayun]吃了! 包子来了[5],被[mahuateng]吃了! 做了两个包子 包子来了[6],被[mayun]吃了! 包子来了[6],被[mahuateng]吃了! 做了两个包子 包子来了[7],被[mayun]吃了! 包子来了[7],被[mahuateng]吃了! 做了两个包子 包子来了[8],被[mayun]吃了! 包子来了[8],被[mahuateng]吃了! 做了

递归函数、生成器、装饰器

递归函数.生成器.装饰器 递归:  在函数执行中调用自身 必须有边界条件,递归前进段和递归返回段 python中递归有层次限制 递归函数实现阶乘 def fact(n):      if n <= 1:         return 1     else:         return n * fact(n-1) 调用:fact(3)=3fact(2)=32fact(1)=32*1 fact(3) 6 实现斐波拉契数列 def fib1(n):     if n <= 1:         r

生成器,装饰器之类

前期知识点回顾 内容回顾1.可迭代对象.迭代器.生成器.装饰器有什么区别? 可迭代对象:内部实现了__iter__方法,是一个迭代器 迭代器:内部实现了__iter__和__next__方法,可以进行for循环 生成器:函数内部有yield的就是生成器,生成器也有一个__next__方法,它的本质是一个迭代器. 生成器有两大功能:1.生成 2.迭代 装饰器:在函数执行之前或者函数执行之后要扩展的功能,装饰器是用闭包实现的2.面向对象的方法?面向对象有三种方法: 实例方法:def func(sel

python学习笔记--装饰器

1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来不这么单调: def showInfo(fun): def wrap(x,y): print "The function before" func(x,y) print "The function after" return wrap def f(x,y): print

Python 生成器&迭代器

Python 生成器 带有 yield 的函数在 Python 中被称之为 generator(生成器),用斐波那契数列: def fab(max):     n, a, b = 0, 0, 1     while n < max:         yield b         a, b = b, a + b         n = n + 1 执行: 1 2 3 4 5 6 7 8 9 >>> for n in fab(5):     print n 1 1 2 3 5 简单地

1.16 Python基础知识 - 装饰器

Python中的装饰器就是函数,作用就是包装其他函数,为他们起到修饰作用.在不修改源代码的情况下,为这些函数额外添加一些功能,像日志记录,性能测试等.一个函数可以使用多个装饰器,产生的结果与装饰器的位置顺序有关. 装饰器基本形式: @装饰器1 def 函数1: 函数体 相当于:==> 函数1 = 装饰器1(函数1) 装饰器特点: 1.不修改源代码的调用方式 2.不修改源代码内容 3.装饰器有高阶函数与递归函数相融合的特点 多个装饰器修饰,示例: @foo @spam def bar():pass

ZMAN的学习笔记之Python篇:装饰器

年前工作事务比较繁琐,我只能用零碎的时间继续学习Python,决定开一个系列的博文,作为自己深入学习Python的记录吧.名字也取好了,就叫<ZMAN的学习笔记之Python篇>~开篇是关于装饰器的,春节假期码的字哈哈~就让我们开始吧! 本文的例子都是自己想的,如果不是很合适,请大家提出宝贵意见哈~谢谢啦! 一.为什么要用“装饰器” 比如我们写了如下一段代码: # 打印0~99 def func(): for i in range(100): print(i) 我们想要监测执行这个函数花费了多

六、PYTHON 学习之装饰器使用

Python是一种强大的语言,即可浅尝辄止,也可深入挖掘.很适合做科学计算.数据挖掘等等.今天我将简单介绍一下Python的装饰器(Decorators)的用法 . 假设我们想要庆祝下生日,需要邀请一些朋友过来参加.但是你有个讨厌的朋友,叫Joe,必须不能让他来啊.可能首先你想到的是建一个list,然后迭代查找并移除所有的Joe童鞋.这当然是个好方法,但是这里为了介绍装饰器,我们会用@来完成这个工作.虽然可能看起来没有什么必要,但是有助于大家学习装饰器的用法. 首先创建一个Python文件app