迭代器

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

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;可以用next()方法持续调用,直到报错。

集合数据类型如list、dict、str等是Iterable但不是Iterator,不能用next()方法,不过可以通过iter()函数(调用__iter__()方法)获得一个Iterator对象。

Python的for循环本质上就是通过不断调用next()函数实现的 比如:for循环一个列表(1.将列表变为terator 2.持续调用next(),最后补获异常)

a = 'abc'
print(type(a))   #<class 'str'> 不具有next()
a = iter(a)
print(type(a)) #<class 'str'>   具有next()

三元表达式

x = int(input('输入'))
print(1) if x>5 else print(0)    #输入x进行判断,大于5输出1,反之,输出0

列表解析式
a = [i for i in range(10)]   #生成0到10的列表,还可以在后面加条件判断
a = [i for i in range(10) if i >5]也可以传入2个元素
dict1 = {'a':1,'b':1,'c':1,'d':1,}
a1 = [(v,m) for v,m in dict1.items()]
print(a1)
for v,m in dict1.items():print(v,m)

生成器:列表生成器,函数式生成器列表解析式变为列表生成器,将[]改为().列表解析式在内存中保存的是列表,生成器保存的是算法(更节省内存)
a = ( i for i in range(10) if i >5)
print(a)                               #生成器的特点1: 生成器只能迭代一次,迭代完了就没了.
for i in a:                             #特点2:状态挂起 当上一次计算完之后,保留状态,下一次计算从上一次计算之后开始print(i)
print(a.__next__())

函数生成器 可以用next()调用 python语法规定:函数内有yield关键字,该函数就为函数式生成器
def _print():yield 1              #  yield,函数调用运行遇到yield停止,将yield的值返还给函数(类似与return)yield 2              #当继续调用函数的next()时,函数从上一次的yield开始,到下一次的yield结束yield 3
a = _print()
print(type(a),a.__next__())      #<class 'generator'>   1

可以用for循环调用yield
def _num2():for i in range(5):yield '当前数字是%s'%str(i)
a1 = _num2()     #a1为<class 'generator'>类
print(a.__next__())
print(a.__next__())
a2 = _num2()
for i in a2:       #使用for循环,迭代函数生成器print(i)

seed(value):
def _num2():for i in range(5):_send = yield '当前数字是%s'%str(i)print(_send)
a1 = _num2()
print(a1.__next__())
print(a1.send(None))   #send()方法相当于操作了一次__next__,不同的是将send(value)中的value传给了上一次yield的赋值(该例子中的_send)
print(a1.send('10'))    #当seed前没有运行过__next__,seed(value)中的value必须为None,否者会报错

模拟单线程的并发:并发(几个程序同时运行)模拟买卖烤饼
def buy(name):while True:time.sleep(0.5)baozi = yieldprint('%s买烤饼%s'%(name,baozi))def product(num,*args):for j in args:j_buy = buy(j)j_buy.__next__()for i in range(1,num+1):j_buy.send('第%s只'%i)
product(5,'jiang','xiao','long')

 

转载于:https://www.cnblogs.com/jiangxiaolong-1996/p/9270491.html

迭代器,生成器,三元表达式,列表解析式相关推荐

  1. 三元表达式列表解析生成器表达式

    三元表达式 列表解析 生成器表达式 三元表达式 在作简单的判断时,三元表达式能简化代码: def max(x, y):if x > y:return xelse:return y # 这个函数可 ...

  2. 4 三元表达式 列表解析 生成器表达式

    三元表达式 #!/usr/bin/env python3 # _*_ coding:utf-8 _*_ # @File : 三元表达式 # @Version : 1.0'''三元表达式能实现简单的 i ...

  3. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  4. 三元表达式 列表递推 生成器表达式

    #!/use/bin/python# -*- conding:utf-8 -*- # def my_max(x,y):# if x >= y : #>=必须紧凑# return x# el ...

  5. python二十二:迭代,三元表达式,列表解析

    迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走,不能往前退)   可迭代对象:实现了迭代器协议的对象( ...

  6. 学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数...

    1 函数的递归 函数的递归调用时函数嵌套调用的一种特殊形式,在调用的过程中又直接或者间接的调用了该函数 函数的递归调用必须有两个明确的阶段: 1 回溯:函数一次次的调用下去每一次调用,问题的规模都应该 ...

  7. day13 生成器 三元运算 列表解析

    本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象想要得到生成器的值必须要用for或者next,list等来获取 生成器生成器就是一个可迭代对象 ...

  8. 初学者python笔记(迭代器、生成器、三元表达式、列表解析、send()与yield())

    文章目录 迭代器与for循环的关系 1. 迭代器协议 2. 可迭代对象 3. for循环的本质 4. 强大的for循环机制 5. 迭代器如何工作的 6. while循环模拟for循环与迭代器的结合 7 ...

  9. Python开发——函数【迭代器、生成器、三元表达式、列表解析】

    递归和迭代 小明问路篇解释说明 递归:小明-->小红-->小于-->小东:小东-->小于-->小红-->小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...

  10. python第四周迭代器生成器序列化面向过程递归

    第一节装饰器复习和知识储备------------ 第一节装饰器复习和知识储备------------ def wrapper(*args,**kwargs):index(*args,**kwargs ...

最新文章

  1. 7000 字读懂互联网公司的架构演变历程
  2. 段页式存储管理方式的定义
  3. 【Visual Studio 2019】创建 MFC 桌面程序 ( 安装 MFC 开发组件 | 创建 MFC 应用 | MFC 应用窗口编辑 | 为按钮添加点击事件 | 修改按钮文字 | 打开应用 )
  4. linux——grep、sed、awk整理及其比较
  5. leetcode:Minimum Depth of Binary Tree【Python版】
  6. c++开发教程之自定义类型的运算
  7. mysql数据库三大引擎优缺点
  8. 扒一扒中断为什么不能调printf
  9. mysql sum函数返回类型_MySQL的sum函数返回的门类
  10. 5个技巧让你更好的编写 JavaScript(ES6) 中条件语句
  11. ASP.NET里的路径的使用-预备篇
  12. oracle unused 语法_【转】Oracle set unused的用法
  13. Win10更换壁纸一直跳到纯色背景问题解决记录
  14. 基于QT+Opencv的红眼去除
  15. 数据结构之有效的括号
  16. 网络——数字数据编码
  17. 如何高效访问OneDrive个人存储空间?三种方法
  18. 这三个方法让你实现文字转语音在线转换
  19. I2C协议研读(三):仲裁和时钟同步
  20. telnet无法打开到主机的连接。 在端口 23: 连接失败

热门文章

  1. Hibernate之持久化对象
  2. 【渝粤教育】国家开放大学2018年春季 0688-22T老年精神障碍护理 参考试题
  3. [渝粤教育] 西南科技大学 西方现代派文学 在线考试复习资料
  4. 【渝粤教育】广东开放大学 外国文学专题 形成性考核 (55)
  5. Matlab处理图像二三例
  6. 计算机视觉实战 (一) 开个视觉实战专栏
  7. linux环境下的c++编程
  8. 在 Angular 8 中,我们可以期待些什么
  9. Python3之logging模块
  10. Spark中使用Dataset的groupBy/agg/join/broadcast hasjoin/sql broadcast hashjoin示例(java api)