迭代器iteration

是访问集合元素的一种方式,只能往前不能往后
迭代器的特点:
1,访问者不需要关注迭代器内部结构,只需通过next()不断取下一个内容
2,访问不能回退
3,循环较大数据集合时,省内存
4,不能随机访问集合中的某一个值

iter()生成迭代器
__next__()访问迭代器,可以迭代生成器

生成器(genertion)

yield
有yield的函数叫生成器,不能直接调用
必须要用__next__()等迭代器来访问,迭代器可以迭代一个集合,也可以迭代一个yield函数
yield可以传出消息__next__(),也可以传入消息send()
send()同时可以传给yield数据,也可以接受数据

生成器只能碰到yield跳出函数,不能使用return

def show_1():
print("1p")
yield
print("3p")
yield
print(show_1()) #<generator object show_1 at 0x000002A9682378E0>
show_P=show_1() #赋值保存地址
show_P.__next__()
show_P.__next__() 1p
3p
#yield传入传出数据
def show_2():
print("1P")
yield 100
print("3P")
n=yield
print("%dP"%n)
yield
show_P=show_2()
show_P.__next__()
show_P.__next__()
show_P.send(10) #传入10
#模拟range()
def Lrange(m=0,n,l=1):
count=m
while count < n:
yield count
count += l for i in Lrange(2,10,2):
print(i)

异步 串行

装饰器(decorator):

装饰器原理:
@w1的时候会做这么几件事情:
1,执行w1()
2,把修饰的函数show传入w1的形参
3,装饰器必须有返回值,返回值为了把原来的show函数封装到新的show函数
4,装饰器必做的一件事就是再嵌套一层函数,封装以前的函数

装饰器一:

def w1(func):
def outer():
print('before')
func()
return outer
@w1
def show():
print("show")

装饰器二(带参数的复杂装饰器):

写装饰器的成本比写函数高,写装饰器比较难,让外部人调用的时候,要自定义登陆界面,让他们写函数,
然后你的装饰器要把他们定义的函数套到装饰器上,@w1(他们自己写的函数),也就是把装饰的东西封装
到函数,装饰器调用封装的装饰函数

def before():
print('login!!')
def w2(before_func):
def accept_main(main_func):
def outer():
before_func()
main_func()
print('after')
return outer
return accept_main
@w2(before)
def show(name):
sore=["dd","ff","gg"]

context模块:上下文切换

import contextlib
@contextlib.contextmanager
def f1():
print("aaa")
yield
print("ccc") with f1():
print("bbb")

执行步骤:

先执行f1,碰到yield转到with下面的语句,with结束后再返回执行f1

Yield后面加参数可以被as后面的参数接收到

import contextlib
@contextlib.contextmanager
def fl():
print("ddd")
yield "eee"
print("fff") with fl() as hd:
print(hd)

contextlib.closing()用于调用类里面定义好的close

class Door(object):
def open(self):
print('Door is opened') def close(self):
print('Door is closed') with closing(Door()) as door:
door.open()

python迭代器,生成器,装饰器,context模块的更多相关文章

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

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

  2. python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

    生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...

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

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

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

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

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

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

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

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

  7. Python基础-迭代器&生成器&装饰器

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

  8. 迭代器/生成器/装饰器 /Json & pickle 数据序列化

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

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

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

  10. python中的迭代器&&生成器&&装饰器

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

随机推荐

  1. 解决ideviceinstaller未安装的问题

    在Mac上,使用Appium时提示: Could not initialize ideviceinstaller; make sure it is installed and works on you ...

  2. python之元编程(元类实例)

    本实例是元类实例,功能是记录该的子类的类名,并以树状结构展示子类的类名. RegisterClasses继承自type,提供的功能是在__init__接口,为类创建了childrens的集合,并类名保 ...

  3. [PHP] - 性能加速 - 开启opcache

    说明 PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的).对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHP APC加速的方法 ...

  4. [2015.08.13]万峰快递单打印软件 v2.2

    <万峰快递单打印软件>是一款简单易用,且支持所有快递单的打印软件.1.支持文字打印位置的坐标精确定位和微调的打印工具.2.操作灵活,只需录入收件人和发件人信息即可打印:3.快递单打印尺寸和 ...

  5. Code Page 编码

    Identifier .NET Name Additional information 037 IBM037 IBM EBCDIC US-Canada 437 IBM437 OEM United St ...

  6. QQ通信原理及QQ是怎么穿透内网进行通信的? (转)

    原:http://f543711700.iteye.com/blog/978044#bc2344608 QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~ ...

  7. 大数据量下,分页的解决办法,bubuko.com分享,快乐人生

    大数据量,比如10万以上的数据,数据库在5G以上,单表5G以上等.大数据分页时需要考虑的问题更多. 比如信息表,单表数据100W以上. 分页如果在1秒以上,在页面上的体验将是很糟糕的. 优化思路: 1 ...

  8. 【java】之3种方式实现Object和Map之间的转换

    利用commons.BeanUtils实现Obj和Map之间转换,这种是最简单,也是最经常用的 public static Object mapToObject(Map<String, Obje ...

  9. office2016与visio2016不能“并存”的问题分析

    现象: 先安装了office2016专业增强版,再安装visio2016时出现提示 搜集了相关资料,可以通俗的理解为:已经安装了离线客户端版的office后,不能再安装在线版visio. 之后,将of ...

  10. Python六大开源框架对比:Web2py略胜一筹

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...