python语法_列表生成器_生成器_迭代器_异常捕获
列表生成式
a = [x for x in range(10)]
print(a)
x 可进行操作
a = [x*2 for x in range(10)]
print(a)
x甚至可以为函数,
def f(n):
return n*n*n
a = [f(x) for x in range(10)]
########################
赋值方法
t = ('123',8)
a,b = t
print(a)
print(b)
#############
a =(x for x in range(10))#
print(a)#generator object
这个时候打印出来的结果是一个生成器对象,并没有生成序列且将里面的元素并全部存进内存(列表生成器时生成的列表,列表里的元素已经全部存进内存了)
类比于之前是厨师做了N道菜出来(列表),菜(元素)全部吃进了肚子(内存),这里只是生成了一个厨师(生成器),想吃什么菜(元素)就调用厨师进行生成。 print(next(a)) 这样就可答应序列的第一个值了,next(a)等价于 a.__next__() a.next()
生成器里能迭代多少次,就能取多少次值,只能按顺序一个一个区,不能隔取,反顺序取,取完不能再进行曲了,会返回迭代错误的报错。
生成器就是一个可迭代对象Iterable object
for i in s:
print(i)
这里for循环其实就是调用了next(s),循环时,第一次i打印0 ,第二次打印1,第二次打印的时候0对象由于没人引用,已经被回收了。 ####
生成器第二种生成方法:使用yield
def foo():
print("Ok1")
yield 1
print("OK2")
yield 2
foo() 直接调用foo() 是不会打印的,因为这是一个生成器函数,碰到yield 就会创建一个生成器
g = foo()
next(g) 采用next(g) 调用,遇到yield 则返回生成器里定义的第一个值。
next(g) 再次采用next(g)进行调用,会yield 1开始,返回值 ##
凡是能进行for循环的 都是可迭代的。
凡是有拥有__iter__方法的都是可迭代对象。
###
使用斐波那契数列进行生成器的例子
def fbnq(max):
n,before,after = 0,0,1
while n < max:
yield after #将需求里需要的值设置为yield 返回的即可,yield 其实就是等同于return.
before,after =after,before + after
n = n+1 next(fbnq(10)) ####
send方法
a.send('eeee')
def bar():
print("OK")
count=yield 1
print(count)
print("OK2'")
yield 2
g = bar()
next(g)
b = g.send('eee')
print(b)
####
迭代器
满足两个条件:1 有iter方法,2 有next方法
l = [1,2,3,4]
d = iter(l)
for 循环内部三件事:
1 调用可迭代对对象的iter方法返回一个迭代器
2 不断调用迭代器对象的next方法
3 捕获异常(迭代器迭代结束)进行退出 ####
判断是否为list,迭代器,可迭代对象
from collections import Iterator
isinstance([1,2,3,4],list)
isinstance([1,2,3,4],Iterator)
isinstance([1,2,3,4],Iterable)
###
f = open('abc123.txt','r)
for i in f.readlines(): 这里是将文件按行取出,把每一行当成一个元素放入内存,这样文件很大时,元素很多,占用内存也用掉了很多。
for i in f(): 这里f是一个迭代器,放入内存只是一个迭代器,这样遍历时,每次拿出来一行就看一行,前一行就被内存回收了,内存里始终只有一行存在。
####
一句话实现查找文件里温度最长的行
print(max(len(x) for x in open('日志记录','r',encoding='utf8')))
python语法_列表生成器_生成器_迭代器_异常捕获的更多相关文章
- Python中的列表解析和生成器表达式
Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...
- python学习笔记——列表生成式与生成器
1.列表生成式(List Comprehensions) python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁.举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行 ...
- python基础:列表生成式和生成器
列表生成式(List Comprehension) 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成 list ...
- Python 迭代器之列表解析与生成器
 [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...
- python基础15下_迭代器_生成器
print(dir([])) #告诉我列表拥有的所有方法 # 双下方法 # print([1].__add__([2])) print([1]+[2]) ret = set(dir([]))& ...
- python基础15上_迭代器_生成器
# 迭代器和生成器 # 迭代器: # 双下方法 : 很少直接调用的方法.一般情况下,是通过其他语法触发的 # 可迭代的 —— 可迭代协议 含有__iter__的方法('__iter__' in dir ...
- day18_文件处理_迭代器_生成器
#!/usr/bin/env python # -*- coding:utf-8 -*- # ********************day18_文件处理_迭代器_生成器 ************** ...
- python语法基础-函数-迭代器和生成器-长期维护
############### 迭代器 ############## """ 迭代器 这是一个新的知识点 我们学习过的可以迭代的对象有哪些? list str ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- Python之列表生成式、生成器、可迭代对象与迭代器
本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法 ...
随机推荐
- Python env使用(virtualenv)
前言 Python 的 virualenv 模块闻名已久,乘着有点时间,学习一下 变更记录 # 19.3.26 创建文章 # 19.3.27 完善文章 正文 安装 pip install virt ...
- 20175226 2018-2019-2《java程序设计》结对编程-四则运算(第一周-阶段总结)
结对编程-四则运算(第一周-阶段总结) 需求分析 实现一个四则运算程序,要求: 自动随机生成小学四则运算题目(加,减,乘,除) 支持整数.真分数且支持多项式 能够利用栈的思想,将中缀转换为后缀表达式 ...
- 提高github代码下载速度的小技巧
1.打开如下路径: C:\Windows\System32\drivers\etc 2.将此处的HOSTS文件复制到其他地方,比如桌面.(此处大概率是没有编辑权限的) 3.用记事本打开HOSTS文件, ...
- table td中的内容过长,显示为固定长度,多余部分用省略号显示
简单描述:table数据过长,结果顶到下一格,影响了数据的查看 解决办法: 给table 加上style属性 另外 给td加上style标签修饰 <table class="tab ...
- SpringBoot 添加mybatis generator 自动生成代码插件
自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <gr ...
- JS,JQ实现模拟暂停FOR循环,间隔几秒后再继续执行
<!DOCTYPE html><head><script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquer ...
- python no module named _socket 原因
python no module named _socket 原因 Lib/site-packages 不在 sys.path 中
- 创建线程的一般方式和匿名内部类方式对比——实现runnable接口,重新run方法
启动:使用静态代理设计模式 优点:可同时实现继承,避免单继承局限性 一般方式: Programer.java /** * 真实角色 * * @author :liuqi * @date :2018-0 ...
- Core Location实现定位
2013/4/22记录: 注意:如非必要,不应该多次轮询位置信息i 使用时,可根据需要制定精度,通过仔细制定所需的绝对最低精度级别,可以纺织不必要的电池消耗. 导入:CoreLocation.f ...
- HTTP协议头部与Keep-Alive模式详解(转)
转自:http://a280606790.iteye.com/blog/1095085 http1.1 中怎么打开持久连接,怎么关闭,怎么传输数据(确定本次数据是否传输完毕) 1.什么是Keep-Al ...