列表生成式

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语法_列表生成器_生成器_迭代器_异常捕获的更多相关文章

  1. Python中的列表解析和生成器表达式

    Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...

  2. python学习笔记——列表生成式与生成器

    1.列表生成式(List Comprehensions) python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁.举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行 ...

  3. python基础:列表生成式和生成器

    列表生成式(List Comprehension) 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成 list ...

  4. Python 迭代器之列表解析与生成器

     [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...

  5. python基础15下_迭代器_生成器

    print(dir([])) #告诉我列表拥有的所有方法 # 双下方法 # print([1].__add__([2])) print([1]+[2]) ret = set(dir([]))& ...

  6. python基础15上_迭代器_生成器

    # 迭代器和生成器 # 迭代器: # 双下方法 : 很少直接调用的方法.一般情况下,是通过其他语法触发的 # 可迭代的 —— 可迭代协议 含有__iter__的方法('__iter__' in dir ...

  7. day18_文件处理_迭代器_生成器

    #!/usr/bin/env python # -*- coding:utf-8 -*- # ********************day18_文件处理_迭代器_生成器 ************** ...

  8. python语法基础-函数-迭代器和生成器-长期维护

    ###############    迭代器    ############## """ 迭代器 这是一个新的知识点 我们学习过的可以迭代的对象有哪些? list str ...

  9. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  10. Python之列表生成式、生成器、可迭代对象与迭代器

    本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法 ...

随机推荐

  1. 配置SSL证书

    在阿里云买了SSL证书,但是访问的时候提示如下图: 这个就郁闷了,按照这个方式导入了证书,但还是不行,后来得到同事的帮助,使用这个工具 然后重启下服务器就可以了.

  2. selenium+python编写自动化脚本时,定位frame中对象操作

    在web应用中经常会出现frame嵌套的应用,假设页面上有A,B两个frame,其中B在A内,那么定位B中的内容则需要先到A,再到B.switchTo().frame方法可以把当前定位的主题切换到fr ...

  3. 完美解决cannot resolve symbol servlet 的报错

    1.右键点击项目,打开open module settings 2.选择Libraries 3.选择中间+号,点击java,然后选择tomcat/lib/servlet-api.jar 4.点击app ...

  4. 强连通分量Kosaraju

    #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #i ...

  5. pwn学习(1)

    0x00 简介 入职之后,公司发布任务主搞pwn和re方向,re之前还有一定的了解,pwn我可真是个弟弟,百度了一番找到了蒸米大佬的帖子,现在开始学习. 0x01 保护方式 NX (DEP):堆栈不可 ...

  6. python序列化与反序列

    python序列化与反序列 在python中提供了两个模块可进行序列化.分别是pickle和json.他们两者的功能都差不多,dumps和dump都是进行序列化,而loads和load则是反序列化. ...

  7. 作用域链和函数内部this指向问题以及bind、call、apply方法

    作用域链和函数内部this指向问题以及bind.call.apply方法 作用域链 作用域是相对于变量而言的, 其意义就在与查找变量(确定变量的来处, 变量是否可以访问到, 确定变量在当前位置是否可以 ...

  8. C语言作业06--结构体&文件

    1.本章学习总结 1.1 思维导图 1.2学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.定义结构体可以使代码整个练习更加紧密,非常实用,当我们需要在对一个个体的不同属性调用时可以更加系统 ...

  9. JDK解压版制作

    今天上  甲骨文 的官网,想下载一个 解压版的 jdk 1.8 结果发现: 没有解压版,只有exe版本.于是就搜索制作方法. 具体就是,双击exe版本,在最后关头要安装的时候, 重点来了! 跟他皮一下 ...

  10. ubuntu“少折腾”

    1.python版本默认python3 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 sudo ...