一、迭代器

1.迭代器协议:对象必须提供一个__next__()方法,执行该方法要么返回迭代中的下一个对象,要么引起一个StopIteration异常以终止迭代,迭代只能向后进行不能往前回退

2.可迭代对象:可实现迭代器协议的对象(通过对象内部定义的__iter__()方法)

3.python的内部工具如for循环、sum、max、min、map、reduce、filter等都通过迭代器协议访问对象

4.使用for循环访问可迭代对象的本质:调用对象的__iter__()方法生成可迭代对象、执行可迭代对象的__next__()方法依次访问元素、全部访问之后自动终止

l=(1,'a','b',[1,2])
a=l.__iter__() #调用元组内部的__iter__()方法生成可迭代对象
print(a) #输出<tuple_iterator object at 0x0000000002701550>
print(a.__next__()) #调用可迭代对象的__next__()访问元素,每执行一次访问一个元素,也可以使用next(a)访问
print(a.__next__()) #输出a
print(a.__next__()) #输出b
print(a.__next__()) #此处执行后已访问到最后一个元素,如果再执行一次a.__next__()会报StopIteration错误

5.两种方法提供生成器,生成器只能遍历一次,遍历完之后就为空

①生成器函数:类似常规函数,但使用yield语句而不是return语句返回结果,yield语句一次返回一个结果,在每个结果中间挂起函数的状态,以便下次从离开的地方继续执行

def d():
yield 1,2,3
yield 2
a=d()
print(a) #返回<generator object d at 0x000000000214A318>,表示a是一个生成器对象
print(a.__next__()) #返回(1, 2, 3)
print(a.__next__()) #返回2

②生成器表达式,类似列表推导,但是生成器会按需产生一个对象,而不是一次生成

三元表达式:True if a>0 else False、i for i in range(10)

生成器表达式一般通过三元表达式加括号生成

a=(i for i in range(10))
print(a) #返回<generator object <genexpr> at 0x000000000219A318>,表示a是一个生成器对象
print(a.__next__()) #返回0
print(a.__next__()) #返回1

二、装饰器

高阶函数:函数接收的参数是一个函数名、或者函数的返回值是一个函数名,满足一个条件即可

装饰器的本质就是函数,为其他函数添加附加功能

原则:不修改被修饰函数的源代码、不修改被修饰函数的调用方式

装饰器=高阶函数+函数嵌套+闭包

import time
def timmer(func):
def wrapper():
start_time = time.time()
func()
stop_time=time.time()
print('test函数运行时间为%s'%(stop_time-start_time))
return wrapper @timmer
def test():
time.sleep(1)
print('test函数运行完毕') test() #运行结果
#test函数运行完毕
#test函数运行时间为1.0002305507659912

python迭代器和装饰器的更多相关文章

  1. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

  2. Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  3. 4.python迭代器生成器装饰器

    容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中 ...

  4. python迭代器、装饰器和生成器

    装饰器 1.装饰器的作用 1. 装饰器作用:本质是函数(装饰其他函数)就是为其他函数添加其他功能 2. 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 3.实 ...

  5. Python迭代器&生成器&装饰器

    1. 迭代器 1.1 可迭代对象(Iterator) 迭代器协议:某对象必须提供一个__next__()方法,执行方法要么返回迭代中的下一项,要么引起一个Stopiteration异常,以终止迭代(只 ...

  6. Python迭代器,生成器,装饰器

    迭代器 通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭代得到的结果作为下一次迭代的初始值). 可迭代对象(iterable):是指该对象可以被 ...

  7. Python(迭代器 生成器 装饰器 递归 斐波那契数列)

    1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...

  8. Day4 - Python基础4 迭代器、装饰器、软件开发规范

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  9. Python基础4 迭代器、装饰器、软件开发规范

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

随机推荐

  1. 全国计算机等级考试二级笔试样卷Java语言程序设计

    一.选择题((1)-(35)每小题2分,共70分) 下列各题A).B).C).D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分. (1)下列选项中不符合良好程 ...

  2. [USACO11JAN]Roads and Planes G【缩点+Dij+拓补排序】

    题目 Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条道路 (1 < ...

  3. redis 链接数满了

    服务器上可以设置timeout参数,这样可以将限制的连接自动释放掉.

  4. HTTPS 和 SSL/TLS 协议:密钥交换(密钥协商)算法及其原理

    转自:https://blog.csdn.net/andylau00j/article/details/54583769 本系列的前一篇,咱们聊了“密钥交换的难点”以及“证书体系”的必要性.今天这篇来 ...

  5. python3.8-运行jupyter 报raise NotImplementedError

    最近安装了python3.8 并安装jupyter,运行时却提示NotImplementedError,很崩溃 经过多次查证 貌似是3.8版本的bug...(这么牛逼的问题,被我遇到了.),不过网络上 ...

  6. 使用现代CSS的响应式版面

    为一个网站选择类型尺寸是项艰巨的任务. 标题和段落的尺寸在网页布局和可读性方面处理起来很棘手. 谢天谢地, 我们有模块化缩放可以引导我们. 模块化缩放是一个数字序列以某种方式关联另一个序列. Tim ...

  7. 【API进阶之路6】一个技术盲点,差点让整个项目翻车

    上次教了实习生一个方案之后,这小子跟运营妹子的关系是越走越近,时不时地撒把狗粮,在我司真正实现了研发运营一家亲~(上回你没看?戳上文剧情回顾:万万没想到,一个技术方案帮实习生追到了运营妹子) 这回想跟 ...

  8. 从上到下打印二叉树(剑指offer-22)

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题目解析 使用队列来进行层次遍历,本质上就是宽搜. 题目解答 import java.util.*; /** public class ...

  9. SpringBoot系列之前后端接口安全技术JWT

    @ 目录 1. 什么是JWT? 2. JWT令牌结构怎么样? 2.1 标头(Header) 2.2 有效载荷(Playload) 2.3 签名(Signature) 3. JWT原理简单介绍 4. J ...

  10. 用nodejs实现向文件的固定位置插入内容

    往文件的固定的行写入数据: 需要用到时nodejs的fs模块和path模块 用到fs模块的方法 readFileSync & writeFileSync : readFileSync 是读取文 ...