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之间的关系 一.语法 ...
随机推荐
- https请求之绕过证书安全校验相关配置
需在weblogic服务器上配置内存溢出的地方加入一行配置: -DUseSunHttpHandler=true 注:空格隔开 然后调用工具类:https://www.cnblogs.com/ ...
- HTTP协议详解及http1.0与http1.1http2.0的区别
HTTP协议介绍 http(超文本传输协议)是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.特点: (1)支持客户/服务器模式. HTTP是一个客户端和服务器端请 ...
- Android Q 变更和新特性
安全和隐私变更 隐私保护是Android Q重要的主题之一,Android Q带来了一系列增强用户隐私保护的变更. 1 应用文件存储空间限制 应用访问限制是Android Q影响最大变更之一.在And ...
- Spark SQL官网阅读笔记
Spark SQL是Spark中用于结构化数据处理的组件. Spark SQL可以从Hive中读取数据. 执行结果是Dataset/DataFrame. DataFrame是一个分布式数据容器.然而D ...
- python设计模式---结构型之代理模式
主要想着nginx:) from abc import ABCMeta, abstractmethod # 结构型设计模式---代理模式 class Actor: def __init__(self) ...
- 1、Linux下部署NetCore应用
1.根据官方文档配好.NetCore环境 https://www.microsoft.com/net/learn/get-started-with-dotnet-tutorial 2.安装Nginx ...
- Selenium之Selenium IDE
官方文档:https://www.seleniumhq.org/docs/02_selenium_ide.jsp 1. Selenium IDE介绍 Selenium IED (Integ ...
- springboot+freemarker毕业设计项目错误合集
1.springboot的主程序类必须在最外层. 换句话说,报错: This application has no explicit mapping for /error, so you are se ...
- Linux文件名匹配和输出重定向--2019-4-24
1.文件名匹配 例:rm *.bak; 删除结尾是.bak的文件 rm *4*.bak; 删除名称中有“4”的.bak文件 ls *.????; 查找结尾是“.”后有四个字母的文件 2.管道 先进 ...
- idea看源码
idea看源码,可以直接搜索.看接口具体调用的是哪个类里面的方法(多态)