3、Python迭代器、列表解析及生成器(0530)
1、动态语言
- sys.getrefcount() //查看对象的引用计数
- 增加对象的引用计数场景
- 对象创建时:以赋值的方式,创建变量名的同时就会创建变量
- 将对象添加进容器时:类似list.append()
- 当对象被当作参数传递给函数时
- 多重目标赋值时:s1 = s2 = s3 = 'abc'
- 为对象创建另外的变量名
- 减少引用计数
- 引用此对象的某变量名被显示销毁:del x
- 引用此对象的某变量名重新赋值
- 从容器中移除对象时,类似list.pop()
- 容器本身被销毁
if
if boolean_exprssion:
....
elif boolean_exprssion:
....
else:
....
while
while boolean_exprssion:
while_suite
if boolean_esprssion2:contine
if boolean_esprssion3:break
else
else_suite
for
for exprssion in object:
while_suite
if boolean_esprssion2:contine
if boolean_esprssion3:break
else
else_suite
raw_input :输入一个内容
for循环练习
1、逐一分开显示指定字典d1中的所有元素,类似如下
k1 v1
k2 v2
2、逐一显示列表中l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']中的索引为奇数的元素;
3、将属性列表l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],但不属于列表l2=['Sun','Mon','Wed','Thu','Sat']的所有元素定义为一个新列表l3;
4、已知列表namelist=['stu1','stu2','stu3','stu4','stu5','stu6','stu7'],删除列表removelist=['stu3','stu7','stu9']
请将属于removelist列表中的每个元素从namelist中移除(属于removelist,但不属于namelist的忽略即可)
非完备遍历:
在实现循环时,如果在实现索引计数时,通过range方式获取列表或某一序列的有限的索引,
比如练习2的range(1,len(l1),2)中,只遍历了索引为偶数的元素
完备遍历:
遍历每一个元素(直接使用for循环,指定一个变量,in某一个序列或可迭代对,一定会将可迭代对象 的每一个元素都迭代一边)
python迭代
1、迭代:重复做一件
2、iterable(可迭代)对象
- 支持每次返回自己所包含的一个成员的对象
- 对象实现了__iter__方法
- 序列类型,如:list,str,tuple
- 非序列类型:如dict,file
- 用户自定义的一些包含了__iter__()或__getitem__()方法的类
迭代:重复做一件事
返回一个迭代器地址,意味着当l1在内存中调用iter方法时,在内存中就创建了一个能够遍历 l1 列表的每一个元素的迭代器
对于listiterator这个迭代器,可以使用next方法遍历其每一个元素,这就叫可迭代对象
for i in l1: //当使用for循环时,for循环会自动的对可迭代对象 l1 去创建并生成一个迭代器:l1.__iter__(),然后用i去遍历这个迭代器(l1.__iter__())所生成的每一个结果;
(如果某对象内部实现了__iter__或者__getitem__方法,当对此对象调用此方法时,就会在内存中创建一个属于当前迭代器的可迭代对象,然后使用此内存中的地址的对象<listiterator at 0x1b6dc90>就可以迭代了)
迭代器
1、迭代器(iterator)又称游标(cursor),它是程序设计的软件设计模式,是一种可在容器物件(container,如列表等)上实现元素遍历的接口
2、迭代器是一种特殊的数据结构,当然在python中,它也是以对象的形式存在的
- 简单理解方式:对于一个集体中的每一个元素,想要执行遍历,那么针对这个集体的迭代器定义了遍历集体中每一个元素的顺序或者方法
调用迭代器的方式不仅仅使用内部的iter,还有一个iter的函数
3、在python中,迭代器是遵循迭代协议的对象
4、使用iter()可从任何序列对象中得到迭代器
5、若要实现迭代器,需要在类中定义next()方法(python3中是__next__())
6、要使得迭代器指向下一个元素,则使用成员函数next()
- 在python中,是函数next(),而非成员函数
7、当没有元素时,则引发StopIteration异常
8、for循环可用于任何可迭代对象
for循环开始时,会通过迭代协议传递给iter()内置函数,从而能够从可迭代对象中获得一个迭代器,返回的对象含有需要的next方法
python列表解析
列表解析是python迭代机制的一种应用,它常用于实现创建新的列表,因此要放置于 [] 中
语法:
求1到10范围内10个数字的平方并除以2的结果(先生成1到10的平方,再遍历解析)
求1到10范围内10个所有偶数的平方并除以2的结果
两个列表l1 = ['x','y','z'],l2 = ['1','2','3']逐一交叉相乘
列表解析:根据已有列表,高效生成新的列表的方式
生成器表达式
1、生成器表达式并不是创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目“产生”(yield)出来
- 生成器表达式使用了“惰性计算”或称为“延迟求值”的机制
2、序列过长,并且每次只需要获取一个元素时,应当考虑使用生成器表达式而不是列表解析
- 生成器表达式于python2.4引入
3、语法
产生偏移和元素
enumerate
- range可在非完备遍历中用于生成索引偏移,而非偏移处的元素
- 如果同时需要偏移索引和偏移元素,则可以使用enumerate()函数
- 此内置函数返回一个生成器对象
3、Python迭代器、列表解析及生成器(0530)的更多相关文章
- python的迭代器、生成器、三元运算、列表解析、生成器表达式
一 迭代的概念 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前 ...
- Day4 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式、序列化与反序列化
一.装饰器 一.装饰器的知识储备 1.可变长参数 :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**k ...
- Python全栈day18(三元运算,列表解析,生成器表达式)
一,什么是生成器 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用自己内置的__iter__方法),所以生成器是可迭代对象. 二,生成器分类在python中的表现形式 1 ...
- Python基础(9)三元表达式、列表解析、生成器表达式
一.三元表达式 三元运算,是对简单的条件语句的缩写. # if条件语句 if x > f: print(x) else: print(y) # 条件成立左边,不成立右边 x if x > ...
- 闭包、装饰器decorator、迭代器与生成器、面向过程编程、三元表达式、列表解析与生成器表达式
一.装饰器 一.装饰器的知识储备 不想修改函数的调用方式,但是还想在原来的函数前后添加功能 1.可变长参数 :*args和**kwargs def index(name,age): print(na ...
- Python基础:08列表解析与生成器表达式
一:列表解析 列表解析(List comprehensions)来自函数式编程语言Haskell .它可以用来动态地创建列表.它在 Python 2.0 中被加入. 列表解析的语法: [exp ...
- 【转】Python之列表生成式、生成器、可迭代对象与迭代器
[转]Python之列表生成式.生成器.可迭代对象与迭代器 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterabl ...
- Python中的列表解析和生成器表达式
Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...
- (转)python高级:列表解析和生成表达式
一.语法糖的概念 “糖”,可以理解为简单.简洁,“语法糖”使我们可以更加简洁.快速的实现这些功能. 只是Python解释器会把这些特定格式的语法翻译成原本那样复杂的代码逻辑 我们使用的语法糖有: if ...
随机推荐
- eos中BM与有BM特色的去中心化。区块链世界,白皮书为共识,代码为法律。
比特币挖矿是谁算力高,谁更容易挖到新的比特币,而BM认为这太浪费资源了,于是设计了DPoS:在DPoS系统里,大家不再挖矿.而是指定几个人负责记账,不叫矿工,而叫见证人.比特股里开始是101人,EOS ...
- 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别
深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...
- FTP搭建 共享上网 穿透内网外网
1.ftp原理介绍 FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常21端口是命令端口,20端口是数据 ...
- vue去掉严格开发,即去掉vue-cli安装时的eslint
vue去掉严格开发,即去掉vue-cli安装时的eslint : 1.vue-cli书写规范(主要是js规范) a.逗号.冒号后面要加空格 b.不能使用双引号,一律使用单引号 webpack的语法检查 ...
- [转载] mysql 索引中的USING BTREE 的意义
索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型. 根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总 ...
- JAVA基本语法测试
一: 1,JAVA的基本运行单位是类 2,类的成员:成员变量,构造方法,普通方法和内部类 3,成员变量种类:字符类型:char 布尔类型:boolean 数值类型:byte, s ...
- Object.defineProperty的理解
一.Object.defineProperty:给一个对象定义一个新的属性或修改一个对象现有的属性,并且返回这个对象 1.语法:Object.defineProperty(参数1,参数2,参数3) 参 ...
- pic_scrapy_python
# _*_ coding:UTF-8 _*_ import requests,json,time,sys from contextlib import closing class get_photos ...
- spring(读取外部数据库配置信息、基于注解管理bean、DI)
###解析外部配置文件在resources文件夹下,新建db.properties(和数据库连接相关的信息) driverClassName=com.mysql.jdbc.Driverurl=jdbc ...
- 利用apache伪静态技术防止盗链
(在我们制作网站的过程中,可能会遇到这样的问题,就是其他的网站直接盗用了我们网站的图片或css或js,这样可能会大大增加我们自己网站的负载. 所以,我们应该考虑一下怎样防止这样的事情发生.) 下面我们 ...