python之迭代器、生成器及列表推导式
一、迭代器
迭代器就是迭代的工具,迭代是一个重复的过程,每次重复都是一次迭代并且每次迭代的结果都是下次迭代的初始值。
lst=[1,2,3,4,5]
count=0
while count<len(lst):
print(lst[count])
count +=1
既然有for循环为什么还要用迭代器呢? 当然对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包
含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引
的迭代方式,这就是迭代器。
可迭代对象:
可迭代对象指的是内置有__iter__方法的对象,我们要如何查看内置是否有__iter__()方法呢?
lst=[1,2,3]
print(dir(lst))
在需要查看的对象前使用dir方法 就是来查看该对象内置的方法,如果其中含有__iter__,又含有__next__()方法那么该对象就是可迭代对象
注:迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象。
lst=[1,2,3]
g = lst.__iter__()
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__()) #当列表中不存在元素提供迭代则会抛出异常StopIteration,或者说结束标志
我们怎么可以避免报错呢?
lst=[1,2,3,4,5,6,7,]
g=lst.__iter__()
while True:
try:
print(g.__next__())
except StopIteration: #此处表示当遇到该提示时终止迭代
break
迭代器的优缺点:
(1)优点: 提供一个统一的,不依赖索引的迭代方式, 节省内存。
(2)缺点: 惰性计算,只能往后走,不能往前退
二、生成器
生成器本质上就是迭代器
def func():
print(111)
return 222
print(func()) def func():
print(111)
yield 222
print(func())
怎样判断生成器,只要函数内部包含有yield关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部代码
def func():
print("")
yield 222
gener = func() #这里是获取生成器,不会执行函数
print(gener.__next__()) #这个时候函数才会执行,yield和return一样都是用来返回数据
生成器的特点和迭代器一样,取值方式和迭代器一样
惰性机制,只能往后退,不能往前,优点是节约内存。取值方式也是用.__next__() 执行函数. 执行到下一个yield.
生成器一般由生成器函数或者生成器表达式来构建
def func():
print(1)
a=yield "a"
print(a)
print(2)
b=yield "b"
print(b)
yield "over"
g =func() #获取生成器
print(g.__next__()) #没有上一个yield 所以不能使用send() 开头必须是__next__()
print(g.send("中华")) # send()与next用法相同,还可以将值传给上一个yield
print(g.__next__()) #send()也不能用来当末尾 yield代表结束 seed没值可传
三、列表推导式
列表推导式是用一行代码来构建你想要的列表。
lst=["","","","","",]
for i in range(len(lst)):
print(i) # 传统方法获取列表的索引值 lst=[i for i in range(0,5)]
print(lst) #将想要的结果放入到列表中 dic={"name":"张三","sex":"男"}
dic = {k:v for k,v in dic.items()}
print(dic) # 字典的推导式与列表大同小异 gen = (i for i in range(1,4))
print(gen) # 这个就是生成器表达式,元组不存在推导式。
生成器表达式与列表推导式的区别
列表推导式比较消耗内存,一次性加载
生成器表达式几乎不耗用内存,只有在用到的时候才会获取分配内存
python之迭代器、生成器及列表推导式的更多相关文章
- Python进阶(四)----生成器、列表推导式、生成器推导式、匿名函数和内置函数
Python进阶(四)----生成器.列表推导式.生成器推导式.匿名函数和内置函数 一丶生成器 本质: 就是迭代器 生成器产生的方式: 1.生成器函数
- python基础(14):生成器、列表推导式
1. 生成器 什么是⽣成器?⽣成器实质就是迭代器. 在python中有三种⽅式来获取⽣成器: 1. 通过⽣成器函数 2. 通过各种推导式来实现⽣成器 3. 通过数据的转换也可以获取⽣成器 ⾸先,我们先 ...
- Python-02 生成器表达式,列表推导式
列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for 变量i in 可迭代的数据类型 ] 列表 ...
- Python的高级特性2:列表推导式,生成器与迭代器
一.列表推导式 1.列表推导式是颇具python风格的一种写法.这种写法除了高效,也更简短. In [23]: {i:el for i,el in enumerate(["one" ...
- 【python】 迭代器、生成器、列表推导式
一.可迭代对象.迭代器 1.可以被for循环的数据类型(可迭代对象): 字符串(str).列表(list).字典(dict).元祖(tuple).range() 2.迭代器 2.1 将可迭代对象==& ...
- Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...
- python之三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
一 三元表达式.列表推导式.生成器表达式 一 三元表达式 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(r ...
- python之生成器和列表推导式
一.生成器函数 1.生成器 就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.构建生成器的两种方式 1,生成 ...
- Python_迭代器、生成器、列表推导式,生成器表达式
1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...
随机推荐
- Django安全配置(settings.py)详解
必须配置项 PASSWORD_HASHER 这个配置是在使用Django自带的密码加密函数的时候会使用的加密算法的列表.默认如下: PASSWORD_HASHERS = ( 'django.contr ...
- Anti Pattern - ThreadLocal variables with Thread Pool(转)
In a previous post, I wrote the usage and benefits of ThreadLocal based instance variables in concur ...
- 线性回归:鸢尾花数据iris
# encoding: utf-8 from sklearn.linear_model import LogisticRegression import numpy as np from sklear ...
- C-LODOP回调多个返回值On_Return_Remain
c-lodop默认一次只能回调一个值,回调后会销毁,如果想回调多个值,可加该语句:LODOP.On_Return_Remain=true;之前有博文:lodop和c-lodop通过打印状态和任务不在队 ...
- ASP.NET MVC路由配置详解
命名参数规范+匿名对象 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", ...
- Python3之内建模块base64
Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的 ...
- 17、vue-cli3 js项目中引入ts混用(typeScript)
说明: vue3.0搭建的项目,不过没有引入ts,后来需要用到一个插件是用ts写的,所以vue要用到ts... 一.安装typescript及loader npm install typescript ...
- Django orm练习
ORM练习题 models生成 from django.db import models # Create your models here. # 书籍管理 class Book(models.Mod ...
- HDU 1016Presentation Error
这是一道典型的DFS题目.幻想有n个箱子,每次都向箱子里扔一个数,(当然第一个是必定是1,因为题目要求按字典序输出).判断输出的条件就是,当我移动到第n+1个箱子的时候,就要return了,当然还要判 ...
- java中selenium判断某个元素是否存在
selenium工具 直接通过findElement方法获取某个元素,如果该元素不存在肯定会报错,selenium又没有可以判断该元素是否存在的方法 于是我们可以手写一个工具类,来判断这个元素是否存在 ...