博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 生成器 延迟加载
阅读量:6785 次
发布时间:2019-06-26

本文共 711 字,大约阅读时间需要 2 分钟。

进入python shell

>>> x = [1, 2, 3]

>>> y = [i*2 for i in x]

>>> y

[2, 4, 6]

>>> type(y)

<type 'list'>

这样得到的y是list类型

>>> y= (i*2 for i in x)

>>> y

<generator object <genexpr> at 0xb74ee89c>

>>> type(y)

<type 'generator'>

将中括号用圆括号去替代后,y变成生成器对象,延迟加载了,只是声明出表达式而没有做真正的运算

我们真正需要它做一些事的时候可以强制转化成真正的list

>>>  list(y)

[2, 4, 6]

这样就变成真正的list

 

同理在数据库操作的时候

如在django中操作一个model对象

question_list = Question.objects.all()

这个语句并没有执行数据库的查询,也就是说没有执行sql语句

当我们去遍历它的时候

for question in question_list:

  ...

  ...

  pass

才会真正执行sql去查询,由于我们遍历的时候可能还会进行一些处理和其他操作

所以可能会发好几条sql给数据库

这时候如果数据量不是很巨大

可以这样:

question_list = list(Question.objects.all())

强制转化成了真正的包含数据的list,sql语句只被执行一次

再进行遍历就相当于从缓存中读取数据

 

转载于:https://www.cnblogs.com/lixiaodi/p/4686100.html

你可能感兴趣的文章
GDI+与GDI屏幕抓图比较
查看>>
mysql中date_add()函数的使用?
查看>>
Window系统查找并关闭进程中的端口
查看>>
BZOJ2151种树——模拟费用流+链表+堆
查看>>
Computers 递推题 sum[i][j]=max(sum[i-1][i-1]+c+sum[i][j],sum[i-1][j]);
查看>>
css clear属性
查看>>
求助listview展开子child问题
查看>>
安卓下面的webview配置问题 玩h5游戏失败
查看>>
机器指令处理的数据所在位置
查看>>
第三次作业
查看>>
北大acm1004
查看>>
Difference Search Path
查看>>
webpack再看一遍
查看>>
利用d3.js对大数据资料进行可视化分析
查看>>
用vue实现博客列表的级联效果
查看>>
Java并发编程序列之线程状态
查看>>
数据结构与算法-链表(上)
查看>>
JavaSE基础:"头疼"的正则表达式
查看>>
Web开发者成长路线总结
查看>>
iOS开发 AutoreleasePool是什么时候销毁的?
查看>>