1.1 迭代器

1、可迭代对象:str,list,tuple,set,dict,

迭代器:f(文件),range()

可迭代对象和迭代器都可以for循环

可迭代对象不会计数,

迭代器会计数,上面操作到第3个,则下面的程序继续使用第4个

以上数据类型中都有一个函数__iter__()

所有包含了函数__iter__()的数据类型都是可迭代对象 Iterable

2、 获取迭代器  .__iter__

迭代器往外拿元素 .__next__

lis = [1,2,3,4]

it = lis.__iter__()    #it是迭代器

print(it.__next__())  #打印第一个元素

print(it.__next__())  #打印第二个元素

3、Iterable:可迭代对象  内部包含__iter__()

Iterator:迭代器      内部包含__iter__() 和 __next__

from collections import Iterable    #可迭代的

from collections import Iterator    #迭代器

lis = [1,2,3,4]

isinstence(对象,类型)  #判断对象是否是这个类型

isinstence(lis,Iterable)    #判断是否是可迭代对象

isinstence(lis,Iterator)    #判读是否是迭代器

4、迭代器的特点:

a 节省内存  迭代器是在循环的过程中,每次生成一个

b 惰性机制  迭代器拿值,一定要next

c 只能往前拿,不能往回走

5、模拟for循环

lis = [1,2,3,4]

it = lis.__iter__()

while True:

try:

print(it.__next__())

except StopIteration:

berak

1.2 生成器

1、生成器函数: 只要含有yield关键字的函数都是生成器函数

生成器表达式:(i for i in lis if )

2、生成器特点

生成器中的数据只能取一次,取完就没有了

惰性运算,不找他取值,他就不工作中

for 循环 套生成器表达式,拆开算

3、生成器函数  yield不能和return共用且需要写在函数中

生成器函数,执行后会得到一个生成器作为返回值

def generator():

print(1)

yield ‘a’

print(2)

yield ‘b’

ret = generator()     #ret既是一个迭代器__iter__(),__next__()

print(ret)

print(ret.__next__())  #第一个yield之前的操作

print(ret.__next__())  #第二个yield之前的操作

可以直接用for循环,读取生成器

for i in ret():

print(i)

4、生成器函数 应用,实时读取文件

def tail(filename):
     f = open(filename,encoding="utf-8")
     while True:
         line = f.readline()
         if line.strip():
             yield line.strip()      #生成器

g = tail("file")
for i in g:
     print(i)

5、生成器函数的方法

send 获取到下一个值的效果基本和next一样

只是在获取下一个值的时候,给上一个值的位置传递一个数据

注意事项:第一次使用生成器的时候,必须使用next获取

最后一个yield不能接受外部的值

def generator():
     print(1)
     co = yield       #第一次迭代的时候执行到yield,
    print(co)       #第二次send迭代到第二个yield,且接受了传过来的参数
     print(2)
     yield
g = generator()
g.__next__()
g.send("women")

6、生成器表达式

g = (i for i in range(10))  #g 就是生成器

(元素相关的操作或者某个操作 for 元素 in 可迭代类型)

lis =[1,2,3,5]
s = [print("women") for i in lis]

7、推导式:遍历操作,筛选操作

列表推导式

g = [i for i in range(10)]  #返回的是一个列表

[满足条件的元素相关操作 for 元素 in 可迭代类型 if 元素相关操作]

ret = [i for i in range(30) if i %3 == 0]

print(ret)

字典推导式

例子字典中值和key互换

dic={1:”women”,2:”nen”}

dic_new = {mcase[k]:k for k in dic}

print(dic_new)

集合推导式 去重

python基础08--迭代器,生成器的更多相关文章

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

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

  2. python基础(9)-迭代器&生成器函数&生成器进阶&推导式

    迭代器 可迭代协议和迭代器协议 可迭代协议 只要含有__iter__方法的对象都是可迭代的 迭代器协议 内部含有__next__和__iter__方法的就是迭代器 关系 1.可以被for循环的都是可迭 ...

  3. (转)python基础之迭代器协议和生成器(一)

    一 递归和迭代 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

  4. Python基础(冒泡、生成器、迭代器、列表与字典解析)

    一.冒泡算法 冒泡算法,给定一组数据,从大到小排序或者从小到大排序,就像气泡一样 原理:  相邻的两个对象相比,大的放到后面,交换位置 交换位置通过a,b=b,a来实现 1.我们可以通过for循环来根 ...

  5. Python基础之迭代器和生成器

    阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...

  6. python基础之 迭代器回顾,生成器,推导式

    1.迭代器回顾 可迭代对象:Iterable 可以直接作用于for循环的对象统称为可迭代对象:Iterable.因为可迭代对象里面存在可迭代协议,所以才会被迭代 可迭代对象包括: 列表(list) 元 ...

  7. 7th,Python基础4——迭代器、生成器、装饰器、Json&pickle数据序列化、软件目录结构规范

    1.列表生成式,迭代器&生成器 要求把列表[0,1,2,3,4,5,6,7,8,9]里面的每个值都加1,如何实现? 匿名函数实现: a = map(lambda x:x+1, a) for i ...

  8. python基础之迭代器协议和生成器

    迭代器和生成器补充:http://www.cnblogs.com/luchuangao/p/6847081.html 一 递归和迭代 略 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个ne ...

  9. python基础8 -----迭代器和生成器

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

  10. Python基础4 迭代器,生成器,装饰器,Json和pickle 数据序列化

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

随机推荐

  1. 第06节-开源蓝牙协议BTStack框架分析

    本篇博客根据韦东山的视频,整理所得. 本篇博客讲解BTStack的框架,首先来看一下硬件的结构: 蓝牙模块接在电脑上,或是接在开发板上.不论接在哪,我们都需要编写程序来控制这个蓝牙模块. . 我们需要 ...

  2. Codeforces Round #609 (Div. 2) A到C题

    签到,乘以两个相邻的合数 #include<bits/stdc++.h> using namespace std; int main(int argc, char const *argv[ ...

  3. linux服务器NAT后无法在内网通过外部IP访问内部服务的问题

    场景一: 将外网访问192.168.100.10的80端口转发到192.168.75.5:8000端口. # iptables -t nat -A PREROUTING -d 192.168.100. ...

  4. 12-cmake语法-内部变量-系统信息

    系统信息 CMAKE_MAJOR_VERSION CMAKE 主版本号,比如 2.4.6 中的 2 CMAKE_MINOR_VERSION CMAKE 次版本号,比如 2.4.6 中的 4 CMAKE ...

  5. docker删除镜像Error response from daemon: conflict: unable to remove repository reference

    Docker无法删除images,由于是依赖container. 1.进入root权限   sudo su 2. 列出所有运行或没有运行的镜像  docker  ps  -a 3.停止containe ...

  6. 【oracle】根据日、月、年分组

    --根据日期分组--------------------------------------------------- SELECT to_char(to_date(XXXX, 'yyyymmdd') ...

  7. 从Oop-Klass模型看透反射

    <红楼梦>第十二回,贾瑞因痴迷王熙凤,被王熙凤折腾的眼看就快不行了.当然这里面是没有多少爱的,完全因王熙凤的美貌而起.就在这时来了一个跛足道人,带来了一面宝镜,说能治好贾瑞的病.当然这可不 ...

  8. 单例模式-DCL双重锁检查实现及原理刨析

    以我的经验为例(如有不对欢迎指正),在生产过程中,经常会遇到下面两种情况: 1.封装的某个类不包含具有具体业务含义的类成员变量,是对业务动作的封装,如MVC中的各层(HTTPRequest对象以Thr ...

  9. 如何计算假设检验的功效(power)和效应量(effect size)?

    做完一个假设检验之后,如果结果具有统计显著性,那么还需要继续计算其效应量,如果结果不具有统计显著性,并且还需要继续进行决策的话,那么需要计算功效. 功效(power):正确拒绝原假设的概率,记作1-β ...

  10. QFileInfo().created() 警告 created is deprecated 怎么改?

    有这样一行代码操作: QFileInfo(...).created().toString(...); QtCreator提示警告: 'created' is deprecated 'created' ...