列表生成式

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')))
 

最新文章

  1. Activity往另外一个Activity传值,Fragment获取另外一个Activity里面的值。
  2. 备忘-Sql server Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
  3. 如何通过ShadowSocket自动更新Chrome
  4. 关于node.js的误会
  5. 如何做好APP测试?
  6. 用c#开发微信 (21) 微信酒店预订系统
  7. centos nfs配置--转载
  8. 用scheme语言实现SPFA算法(单源最短路)
  9. Row Cache Objects
  10. 最快的方法来清除Chrome浏览器DNS高速缓存
  11. nodejs版本管理工具NVM(Node Version Mene)
  12. CentOS通过yum安装php7.0
  13. .Net Core部署到CentOS
  14. 【学习总结】GirlsInAI ML-diary 总
  15. Python--Virtualenv简明教程(转载https://www.jianshu.com/p/08c657bd34f1)
  16. Log4j2 设置控制台打印彩色日志
  17. UCenter通信原理
  18. dubbo入门学习 一SOA
  19. 2018-09-28 用Python3和tkinter开发简单图形界面程序
  20. 反射 与 preprrty装饰器

热门文章

  1. java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念
  2. 移动端web app开发学习笔记
  3. 【Git】Git提交代码的正确姿势
  4. 2-3、配置Filebeat
  5. hibernate-第二章-关系映射
  6. 记录一次go性能调试的过程
  7. 为什么要使用getters和setters/访问器?
  8. ubuntu16.04安装opencv3.4.0
  9. java.lang.UnsatisfiedLinkError解决方法汇集(转载)
  10. 微服务框架——SpringCloud(三)