'''
1. 什么是迭代器
什么是迭代:迭代就是一个重复的过程,但是每一次重复都是基于上一次的结果而进行的
单纯的重复不是迭代:
while True:
print(1) 迭代的过程
l=['a','b','c']
i=0
while i < len(l):
print(l[i])
i+=1 迭代器:迭代取值的工具 2. 为何要用迭代器
迭代器的优点:
1. 提供了一种可以不依赖索引的迭代取值方式 3. 如何用迭代器
'''
# 可迭代的对象:但凡内置有__iter__方法的对象就是可迭代的对象,例如:str\list\tuple\dict\set\文件对象
# ''.__iter__()
# [].__iter__()
# (1,2).__iter__()
# {'x':1}.__iter__()
# {1,2,3}.__iter__()
# open('今日内容').__iter__() # 调用可迭代对象的__iter__()方法,会得到一个返回值,该返回值就是迭代器对象 # 迭代器对象: 既内置有__iter__方法又内置有__next__方法,例如文件对象 # dic={'x':1,'y':2,'z':3}
# print(len(dic)) #dic.__len__() # iter_dic=dic.__iter__()
# # print(iter_dic)
# print(iter_dic.__next__())
# print(iter_dic.__next__())
# print(iter_dic.__next__())
# # print(iter_dic.__next__())
#
# new_iter_dic=dic.__iter__()
# print(new_iter_dic.__next__())
# print(new_iter_dic.__next__())
# print(new_iter_dic.__next__()) # iter_dic=iter(dic) #dic.__iter__()
# next(iter_dic) #iter_dic.__next__() # 迭代器总结:
# 优点:
# 1. 提供了一种不依赖索引的迭代器取值方式
# 2. 节省内存
# 缺点:
# 1. 一次性,只能往后一直取,无法预测迭代中包含的值的个数
# 2. 无法取到指定的值,不如按照索引或者key的取值方式灵活 dic={'x':1,'y':2,'z':3}
# iter_dic=iter(dic)
#
# while True:
# try:
# print(next(iter_dic))
# except StopIteration:
# break
# print('='*100)
# # iter_dic=iter(dic)
# while True:
# try:
# print(next(iter_dic))
# except StopIteration:
# break # for k in dic:
# print(k) # for循环的底层工作原理:
#1. 调用in后面那对象的内置方法__iter__,拿到一个迭代器对象iter_obj
#2. 执行k=next(iter_obj),循环往复直到抛出异常StopIterration
#3. for循环会捕捉异常然后结束循环 dic={'x':1,'y':2,'z':3}
iter_dic=iter(dic)
print(iter_dic.__iter__().__iter__().__iter__() is iter_dic) # with open(r'D:\周末三期\day06\01 叠加多个装饰器.py','r',encoding='utf-8') as f:
# for line in f:
# print(line)
'''
1. 什么是生成器
生成器就是一种自定义的迭代器 3. 如何使用生成器:
在函数内但凡出现yield关键字,然后调用函数不会立即执行函数体代码,会得到一个返回值,该返回值称之为生成器,即我们自定义的迭代器
''' # def func():
# print('first')
# yield 1
# print('second')
# yield 2
# print('third')
# yield 3
# print('fourth')
#
# g=func()
# # print(g)
# # g是生成器对象,而生成器对象本质就是迭代器
# res1=next(g)
# print(res1)
#
# res2=next(g)
# print(res2)
#
# res3=next(g)
# print(res3)
#
# next(g) # def my_range(start,stop,step=1): #start=1 stop=7 step=2
# while start < stop: # 7 < 7
# yield start #
# start+=step # start=7
#
#
# res=my_range(1,70000000000000000000000000000000000000000000000000000000,2)
# for item in res:
# print(item) # print(next(res))
# print(next(res))
# print(next(res))
# print(next(res)) # print(res) #总结yield:
#1. 提供一种自定义迭代器的解决方案
#2. yield vs return:
# 相同点:都能返回值,并且返回值没有类型与个数限制
# 不同点:yield可以返回值多次值,而return只能返回一次值
 
# 列表生成式
# res=[]
# for item in range(1,11):
# if item > 5:
# res.append(item)
# print(res) # res=[item for item in range(1,11) if item > 5]
# print(res) # names=['alex_sb','egon','kevin_sb','hxx_sb','wxx_sb']
# res=[name for name in names if name.endswith('sb')]
# print(res) # 字典生成式
# res={i:i**2 for i in range(10) if i > 5}
# print(res) # l=[('name','egon'),('age',18),('gender','male')]
# dic={k:v for k,v in l if k!='age'}
# print(dic) # res={i for i in range(10)}
# print(res,type(res)) # 生成器表达式
res = (x for x in range(1, 5))
# print(res)
# print(next(res))
# print(next(res))
# print(next(res))
# print(next(res))
# print(next(res)) with open('aaa.txt',encoding='utf-8') as f:
# g=(len(line) for line in f)
# print(max(g)) res=max(len(line) for line in f)
print(res)
												

Python记录12:迭代器+生成器+生成式的更多相关文章

  1. python各种模块,迭代器,生成器

    从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...

  2. python基础6 迭代器 生成器

    可迭代的:内部含有__iter__方法的数据类型叫可迭代的,也叫迭代对象实现了迭代协议的对象 运用dir()方法来测试一个数据类型是不是可迭代的的. 迭代器协议是指:对象需要提供next方法,它要么返 ...

  3. python杂记-4(迭代器&生成器)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...

  4. 从零开始的Python学习Episode 12——迭代器&生成器

    生成器 列表生成式 用于快速地生成一个列表 a = [x*x for x in range(1,9)] print(a) #输出[1, 4, 9, 16, 25, 36, 49, 64] 也可以用于生 ...

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

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

  6. python中的迭代器 生成器 装饰器

    什么迭代器呢?它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器,_ ...

  7. Python学习 :迭代器&生成器

    列表生成式 列表生成式的操作顺序: 1.先依次来读取元素 for x 2.对元素进行操作 x*x 3.赋予变量 Eg.列表生成式方式一 a = [x*x for x in range(10)] pri ...

  8. python装饰器,迭代器,生成器,协程

    python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出12 ...

  9. Python入门之迭代器/生成器/yield的表达方式/面向过程编程

    本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...

随机推荐

  1. halcon应用案例探究

    14.1  Access 1. get_region_chain 功能:一个对象的轮廓(contour)作为链式码. 2. get_region_contour 功能:查询一个目标的轮廓(contou ...

  2. 寄存器理解 及 X86汇编入门

    本文整理自多材料源,感谢原址分享,请查看末尾Url I, 汇编语言分类: 汇编语言和CPU息息相关,但是不能把汇编语言完全等同于CPU的机器指令.不同架构的CPU指令并不相同,如x86,powerpc ...

  3. 关于pythoh面向过程开发人员三步转面向对象的补充,再加一步,四步走战略。转面向对象也可以有固定公式。

    前言: oop非常非常非常重要.搞不懂oop,就玩不了python,就算能写也一定是写代码时候喜欢靠猜瞎猫碰死老鼠写得心很虚.为什么这么说呢,我也是从面向过程编程到死走过来的,一路def到死,一看到有 ...

  4. DeBug Python代码全靠print函数?换用这个一天2K+Star的工具吧,改进版

    pysnooper是代码debug神器,比无限low print好很多和也比日志debug好一些,比断点调试也好一些,这个很犀利的装饰器. https://www.toutiao.com/a66829 ...

  5. express中间件--Morgan 日志记录

    Morgan是一个node.js关于http请求的日志中间件 安装模块 npm install morgan --save #保存到package.json的依赖列表1使用方法 在终端打印日志...v ...

  6. 通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 PoS共识机制的变种---Casper

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  7. Spring AOP 自动创建代理

        Spring为我们提供了自动代理机制,让容器为我们自动生成代理,把我们从烦琐的配置工作中解放出来,在内部,Spring 使用BeanPostProcessor自动地完成这项工作.   1.实现 ...

  8. Centos下普通用户设置sudo权限

    若执行sudo命令的用户没有sodu权限,则会报以下错误 violet is not in the sudoers file.This incident will be reported 若想让vio ...

  9. 如何使用Vue-cli搭建和运行vue项目

    此文章  主要参考:https://jingyan.baidu.com/article/5225f26bbb430fe6fa0908ce.html 在vue init webpack my-proje ...

  10. Linux 的基本操作(系统的远程登录)

    系统的远程登录 首先要说一下,该部分内容对于linux初学者来讲并不是特别重要的,可以先跳过该章节,先学下一章,等学完后再回来看这一章. Linux大多应用于服务器,而服务器不可能像PC一样放在办公室 ...