四.Python迭代器生成器和装饰器

迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

Python的for循环本质上就是通过不断调用next()函数实现的。

list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

def fib(max):
    n=0
    a=0
    b=1
    while max>n:
       yield b
       a,b=b,a+b
       n=n+1

f=fib(10)

for i in f:
    print(i)

装饰器

装饰器: 本质是函数, 用于装饰其他函数, 附加一些本身所没有的功能

原则:1.不能修改被装饰的函数的源代码

2.不能修改被装饰的函数的调用方式

import time
def bar():
    time.sleep(3)
    print(‘in the bar‘)

def test1(func):
    start_time=time.time()
    func()    #run bar
    stop_time=time.time()
    print("the func run time is %s" %(stop_time-start_time))

test1(bar)
bar()

原文地址:https://www.cnblogs.com/hiss/p/8450636.html

时间: 2024-08-08 18:51:19

四.Python迭代器生成器和装饰器的相关文章

Day4 - 迭代器&生成器、装饰器、Json & pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

迭代器、生成器、装饰器学习总结

一.迭代器: 1.什么是迭代器? 在python中,迭代器是一个可以记住遍历位置的对象,迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问完,迭代器只能往前不会后退.简单来讲我们见的比较多的是for 循环来遍历列表.元组.字符串等容器,这个就是迭代器的使用,所以说,迭代器简单可以理解成我们平时要从柜子里取东西时的动作. 2.两个内置迭代器协议方法: a.方法iter():返回对象本身,是for循环语句使用迭代器的要求. b.方法next():用于返回容器中下一个元素(所谓容器,简单理解

迭代器、生成器、装饰器(转)

一.迭代器: 1.什么是迭代器? 在python中,迭代器是一个可以记住遍历位置的对象,迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问完,迭代器只能往前不会后退.简单来讲我们见的比较多的是for 循环来遍历列表.元组.字符串等容器,这个就是迭代器的使用,所以说,迭代器简单可以理解成我们平时要从柜子里取东西时的动作. 2.两个内置迭代器协议方法: a.方法iter():返回对象本身,是for循环语句使用迭代器的要求. b.方法next():用于返回容器中下一个元素(所谓容器,简单理解

Python学习之路-装饰器&生成器&正则表达式

装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器, def login_decorator(func):     def inner():         if USER_TEMP["status"] == False:             print("\033[31;1m用户未登录,请先登录\033[0m")             login_atm()

python学习道路(day5note)(列表生成式,生成器,装饰器,常用模块)

生成列表的方式 data = [1,2,3]  需求   每个数字加上1 # data = ( x*2 for x in range(5)) print(data) 列表生成式 后面的I赋予加1操作,i+q只能放在前面 加上三元运算可以 生成器 (惰性运算,算到哪个值就到哪个值,往后就不算了)就是一个推到行算法 中括号叫做列表生成式,小括号叫做生成器 从左到右执行  当我访问到后面的数时候,前面的就没了 这样也是可以取值的,从左到右 斐波拉契数列 ### ### 转为生成器 加了yield 叫做

python高级编程之装饰器04

from __future__ import with_statement # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #with和contextlib #对于要确保即使发生一个错误时也能运行一些清理代码而言,try...finally语句很有用,对以下场景,如: """ 关闭一个文件, 释放一个锁 创建一个临时代码补丁 在特殊环境中运行受保护代码 ----------- with语句覆盖

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

递归函数.生成器.装饰器 递归:  在函数执行中调用自身 必须有边界条件,递归前进段和递归返回段 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

python学习笔记之装饰器(语法糖)

什么是装饰器 装饰器的知识点铺垫(函数即变量,高阶函数,嵌套函数) 不带参数的装饰器示例 带参数的装饰器示例 作业 一.什么是装饰器 本质上,装饰器就是返回一个函数的高阶函数.装饰器就是一个函数 装饰器的原则: 不修改被装饰对象的源代码 不修改被装饰对象的调用方式 二.装饰器涉及的知识点 函数即变量 高阶函数 嵌套函数 函数即变量: 在python中,一个变量首先被定义,分配内存空间,然后再使用. 以x=1,这个简单的赋值语句为例子.首先在内存中分配一个空间,x指向该内存空间,该内存空间内存入"

生成器,装饰器之类

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