python生成器迭代_python中的生成器和迭代器

前言:

我们来了解一下什么是python中生成器。了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用。

定义:

生成器和迭代器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

>>> L = [x * x for x in range(10)]>>>L

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> g = (x * x for x in range(10))>>>g at 0x1022ef630>

在上面的例子中:(x * x for x in range(10))是生成器,g是迭代器。

因为生成器是能够返回一个迭代器的函数,其最大的作用是将输入对象返回为一个迭代器

生成器是个函数!迭代器是个对象!在python3.5中,range(5)是一个生成器,返回的结果是一个对象,即 at 0x1022ef630>就是一个迭代器

我们创建了一个generator后,通过for循环来迭代它,并且不需要关心StopIteration的错误。

g = (x * x for x in range(10))for i ing:

print(i)

运行结果:

0

1

4

9

16

25

36

49

64

81

或者我们可以通过__next__()从生成器中取值

g = (x * x for x in range(10))

print(g.__next__())

print(g.__next__())

print(g.__next__())

print(g.__next__())

运行结果:

0

1

4

9

generator非常强大。如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。

创建迭代器

A、使用内建的工厂函数iter(iterable)可以将可迭代序列转换为迭代器

a=[1,2,3,4]

b=(1,2,3)

str='Tomwenxing'print(iter(a))

print(iter(b))

print(iter(str))

1419341-20181022194845501-1107659448.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 生成pdf_如何使用Python生成PDF?

在日常办公中,我们会经常使用PDF文件。生成PDF的方法有很多,其中Python就可以。你知道怎么使用Python也可以生成PDF吗?下面来和小编一起学习下吧。首先我们访问网址:https://wkhtmltopdf.org/downloads.html ,根据自己…

《avascript 高级程序设计(第三版)》 ---第三章 基本概念

本章主要介绍Javasript语言的一些语法: 1.严格模式:开启:"use strict"; 2.变量:全部用var来定义,在函数中使用的称为局部变量,不能全局使用。 3.数据类型:undefined,null,boolean,num…

java 代码重用需要注意的事项_程序员笔记|编写高性能的Java代码需要注意的4个问题...

一、并发无法创建新的本机线程......问题1:Java的中创建一个线程消耗多少内存?每个线程有独自的栈内存,共享堆内存问题2:一台机器可以创建多少线程?CPU,内存,操作系统,JVM&#xff0…

java vbs_VBS基础篇 - vbscript Dictionary对象

Dictionary是存储数据键和项目对的对象,其主要属性有Count、Item、Key,主要方法有Add、Exists、Items、Keys、Remove、RemoveAll。创建Dictionary对象定义并创建Dictionary对象,使用CreateObject创建并返回自动化对象的引用Dim DicSet Dic C…

java integer最大值_五分钟学会java中的基础类型封装类

在刚刚学习java的时候,老师不止一次的说过java是一种面向对象的语言,万物皆对象。对于java中的基础数据类型,由于为了符合java中面向对象的特点,同样也有其封装类。这篇文章对其有一个认识。一、基本认识其实在jdk1.5之前&#xf…

hadoop 单节点安装

http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/SingleCluster.html ,一,.安装hdfs1,hadoop-env.sh修改java_home2,core-site加入1,注意使用主机名映射2,端口使用:80203,缓存目录&#xff0…

web.xml文件位于web项目的目录结构中的_看完这篇,别人的开源项目结构应该能看懂了...

我为什么要写这篇近来,和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题。很多小伙伴表示网上下载下来的开源项目看不懂,项目结构和代码分层看得很蒙,不知道应该以一个什么样的思路去学习和吸收别人的项…

06-CABasicAnimation基础核心动画

06-CABasicAnimation基础核心动画 核心动画只作用在层上面. 动画的本质是改图层的某一个属性. CABasicAnimation *anim [CABasicAnimation animation]; 图层有哪些属性,这里才能写哪些属性. anim.keyPath "transform.scale"; anim.toValue 0.5; 告诉动画完成的时候…

java 异常 理解_java异常理解(1)

JAVA异常处理机制1引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不信?那你看…

python turtle 绘图速度用函数会快吗_有趣的Python turtle绘图

专 题 Feature Story 16 \ China Science & Technology Education 文 _ 毛京宇/北京师范大学第三附属中学 魏云靖/北京市师达中学 有趣的 Python turtle 绘图  Python turtle 的发展 Python 中的 turtle 模块受启发于在欧美有 着广泛基础且历史悠久…

网络导通概率的研究

最近老师给了一个题目,说是研究一个正常矩阵任意概率置点概率下,双向导通(x,y)的概率(要求有自然边界条件,也就是可以从0->length-1),用代码敲了一下demo,结果发现有个…

在java中字符流怎么复制_Java 使用字符流拷贝数据

使用字符流拷贝数据时,需要注意在文件末尾处的数据,因为最后一次读取的长度不会刚好与数组input长度相同,所以需要引入新的变量来存储每次读取的长度。import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundExcep…

mysql workbench中文设置_使用Workbench完成流体压力渗透分析

“之前的案例,APDL Showcase3里使用到了流体压力渗透载荷。有朋友读到以后,希望能在Workbench里实现这一功能。有需求就有动力,我们来试一试。 ”01—结果展示先看计算结果:(为了截图方便将模型旋转了90度)该案例为轴对称模型&…

总结下用Vue.js和webpack遇到的问题

这段时间用vue.jswebpack做一个单页应用的demo,第一次尝试模块化,技术水平有限,学习不够深入,总是遇到各种问题,所谓前事不忘后事之师,so记录下。 1.ES6匿名函数里面this值 结合webpack,使用Bab…

java+session+存在哪_JAVA中Session

会话状态的维持是开发Web应用所必须面对的问题,有多种方法可以来解决这个问题,如使用Cookies,hidden类型的表单域,或直接把状态信息加到URL中等,还有Servlet本身提供了一个HttpSession接口来支持会话状态的维持&#x…

ddns客户端_DDNS哪家最方便?试试看Mikrotik的ROS!

没有固定IP的情况下,想要提供外网访问,那么DDNS是必不可少的一个设置。DDNS(Dynamic Domain Name Server,动态域名服务)是将用户的动态IP地址映射到一个固定的域名解析服务。需要注意的是,不是域名是动态的…

手机网页里的模态对话框

今日帮朋友写了一个手机网页里用的模态对话框,防止自己日后忘记,所以mark一下。原理很简单,当弹出了模态对话框的时候,就是touchmove事件进行监听,如果是对话框的touchmove事件,就允许拖动,其他…

python最好用的画图工具_python Matplotlib.plot 超好用的画图技巧,总有一条用得到!...

低阶通用模板 import numpy as np import matplotlib.pyplot as plt # 数据准备 xnp.linspace(0,10,num30) ynp.sin(x) znp.cos(x) # 设置画布大小 plt.figure(figsize(6, 3)) # plot 画x与y和x与z的关系图 plt.plot(x,y,labelsin(x),colorred, linewidth1,markero,markersize3…

java join使用实例_Java多线程中关于join方法的使用实例解析

先上代码新建一个thread,代码如下:package com.thread.test;public class mythread extends thread {private string name;public mythread(string name) {this.name name;}overridepublic void run() {for (int i 0; i < 100; i) {system.out.println(name"["i…

iptables禁止端口和开放端口

1、关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放。 下面是命令实现&#xff1a; iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP 再用命令 iptables -L -n 查看 是否设置好&#xff0c; 好看到全部 DROP 了 这样的设置好了&#xff0c;我们只…