迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走,不能往前退)
  可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个_iter_()方法)
  协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象

python中强大的for循环机制

for循环本质:循环所有对象,全都是使用迭代器协议.

lt = ['l', 'i', 'u']
# 下标访问方式
lt[0]
lt[1]
lt[2]
# lt[3]  # 超出边界报错# 遵循迭代器协议访问方式
iter_test = lt.__iter__()
iter_test.__next__()
iter_test.__next__()
iter_test.__next__()
# iter_test.__next__()# 超出边界报错# for 循环访问方式
# for 循环的本质就是遵循迭代器协议的方式,先调用iter_test = lt.__iter__()
# 再调用iter_test.__next__(),直到for循环捕捉到StopIteration终止循环
#  for 循环所有对象的本质都是一样的道理
for i in lt:print(i)# while模仿for循环
iter_test = lt.__iter__()
while True:try:print(iter_test.__next__())except StopIteration:print("迭代完毕,循环终止了...")break

生成器初步探索

生成器:可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__()方法).所以生成器就是可迭代对象.

生成器分类及在python中的表现形式:1.生成器函数:常规函数定义,但是使用yield而不是return返回结果.yield一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行.

2. 生成器表达式:类似于列表推导,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表.

python使用生长器对延迟操作提供了支持.所谓延迟操作,是指在需要的时候产生结果,而不是立刻产生结果.这也是生成器的主要好处.

name="刘备"
# 三元表达式
res = "厉害了" if name=="刘备" else "不行"列表解析:语法:[expression for iter_val in iterable][expression for iter_val in iterable if cond_expr]lt = [i+2  for i in range(10) ]lt = [i+2  for i in range(10) if i>6]生成器:1.来自函数(生成器函数,可以保存函数的运行状态)def gene():yield 6yield 7yield 8v = gene()print(v.__next__())# 可以在之间加上代码代码print(v.__next__())2. 来自列表解析
v = (i for i in range(10))
print(v.__next__())  # 生成器本身就有 __next__()

生成器特性:

1. 语法上和函数类似. 只是生成器函数使用yield返回一个值

2. 自动实现迭代器协议,可以直接__next__()

3. 状态挂起:生成器使用yield语句返回一个值.

生成器优点: 1.延迟计算,一次返回一个结果.并不会一次产生全部结果,这样不仅节省内存,而且这种机制非常适合处理大数据.

三国人物.txt文件内容{"name":"刘备", "age":"25"}{"name":"关羽", "age":"24"}{"name":"张飞", "age":"23"}{"name":"曹操", "age":"24"}{"name":"郭嘉", "age":"23"}{"name":"曹丕", "age":"5"}def getPeople():with open("三国人物", "r", encoding="utf-8") as f:for i in f:yield igene = getPeople()
# for g in gene:
#     print(eval(g)["age"])
# 使用三元表达式求和
res = sum(int(eval(g)["age"]) for g in gene)
print(res)

python二十二:迭代,三元表达式,列表解析相关推荐

  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入门(二十二)- 常见模块2(正则表达式及容器)

    二十二 常见模块2(正则表达式及容器) 22.1 正则表达式及re模块 正则表达式(Regular Expression)用于描述一种字符串匹配模式(Pattern),它可以用于检查一个字符串是否含有 ...

  4. 零基础入门学Python(十二)—— 魔法方法(下)

    零基础入门学Python系列内容的学习目录→\rightarrow→零基础入门学Python系列内容汇总. 魔法方法(下) 1. 构造和析构 2. 算术运算 3. 简单定制 4. 属性访问 5. 描述 ...

  5. [Python人工智能] 二十二.基于大连理工情感词典的情感分析和情绪计算

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章分享了CNN实现中文文本分类的过程,并与贝叶斯.决策树.逻辑回归.随机森林.KNN.SVM等分类算法进行对比.这篇 ...

  6. Python自动化(十二):一分钟搞定几百个Excel中查找的数据

    一.需求说明 首先我们来看下今天的需求,有一份档案记录总表的Excel工作簿, 每天会根据当天日期建立新表,每天的表格内包含所有档案信息,同时也有可能会添加新的档案名.同个年度的总表在年末可能会有两. ...

  7. FreeSql (二十九)Lambda 表达式

    FreeSql 支持功能丰富的表达式函数解析,方便程序员在不了解数据库函数的情况下编写代码.这是 FreeSql 非常特色的功能之一,深入细化函数解析尽量做到满意,所支持的类型基本都可以使用对应的表达 ...

  8. 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. GUI的演化和python编程——Python学习笔记之二十二

    GUI的演化和python编程--Python学习笔记之二十二 写完了有关长寿的两篇博文,本该去完成哥德尔那个命题六的.对计算机图形界面的好奇,让我把注意力暂时离开那个高度抽象难读的哥德尔,给转到计算 ...

最新文章

  1. 大学计算机专业全英文论文,5计算机专业 外文文献 英文文献 外文翻译 jsp应用框架 中英对照 大学学位论文.doc...
  2. c++中求字符串数组的min/max
  3. java线程池的工作原理_Java 线程池的介绍以及工作原理
  4. 神经网络的可解释性综述!
  5. 『非常重要』非矿工用户如何安全度过BCH11月算力战历史时刻!
  6. Ubuntu 16.04开机自动开启数字键盘NumLock
  7. python 中 if __name__ == '__main__' 判断的作用
  8. 愚人节整人软件测试自学,2020愚人节整蛊整人攻略大全
  9. Ubuntu 12.04: virtualenv下安装 numpy, scipy, matpl...
  10. 小学计算机三年级课程目录,小学生信息技术课本目录.doc
  11. error: default argument given for parameter 4
  12. (计算机组成原理)第五章中央处理器-第四节3:微指令的设计
  13. 网友用筋膜枪提升手速抢茅台,平台回应不可靠,用了你也抢不到!
  14. python怎么播放mp3_python 下如何播放mp3
  15. shell sort result to self
  16. python工作目录,如何使用python 3获取当前工作目录?
  17. python爬虫面向对象_Python爬虫技术--基础篇--面向对象编程(上)
  18. 如何设置能快速的阅读一本PDF电子书并做笔记?
  19. 搜狗浏览器安装第三方插件
  20. 高效数字音频功率放大器NTP8928

热门文章

  1. jsonp解析 html
  2. 触摸事件练习 -- 手势解锁
  3. a href=#与 a href=javascript:void(0) 的区别 打开新窗口链接的几种办法
  4. vc++6.0的工作空间/工作区是什么?工程 文件 工作区什么区别?
  5. markdown常用操作(特殊字符显示、换行、字体颜色和大小、图片位置和大小)
  6. ASP.NET系统 + Access数据库
  7. 记一次小的51CTO聚会
  8. [小结]硬盘分区的知识与意义
  9. 通过UDP的组播方式收发数据
  10. ASP开发10条经验总结(网上找的)