q****x 发帖数: 7404 | 1 【 以下文字转载自 JobHunting 讨论区 】
发信人: quantx (X矿工), 信区: JobHunting
标 题: Python大牛请进
发信站: BBS 未名空间站 (Sun Sep 23 04:11:34 2012, 美东)
这个yield到底有啥好处?这里的例子怎么省内存了?readlines不还是要读入整个文件
吗?
http://stackoverflow.com/questions/7883962/where-to-use-yield-i
我的理解:
def func_0(input_list):
return [f(i) for i in input_list]
def func_1(input_list):
for i in input_list:
yield f(i)
这两个区别在于,func_0把所有的f(i)算好,返回。func_1创建一个对象,包含input_
list,函数f,迭代子iter。遍历这个对象时,动态计算f(i)。这样看上去只是lazy
evaluation,并没有省内存啊。 |
S*********g 发帖数: 5298 | 2 yield是返回一个generator
只有你在问generator要next的时候,才会去读
【在 q****x 的大作中提到】 : 【 以下文字转载自 JobHunting 讨论区 】 : 发信人: quantx (X矿工), 信区: JobHunting : 标 题: Python大牛请进 : 发信站: BBS 未名空间站 (Sun Sep 23 04:11:34 2012, 美东) : 这个yield到底有啥好处?这里的例子怎么省内存了?readlines不还是要读入整个文件 : 吗? : http://stackoverflow.com/questions/7883962/where-to-use-yield-i : 我的理解: : def func_0(input_list): : return [f(i) for i in input_list]
|
q****x 发帖数: 7404 | 3 那不就是lazy evaluation。
所谓generator不就是一个对象,封装了输入,算子,迭代子。
这种情况下线程安全性有问题吧。
【在 S*********g 的大作中提到】 : yield是返回一个generator : 只有你在问generator要next的时候,才会去读
|
c*****e 发帖数: 3226 | 4 http://stackoverflow.com/questions/1131430/are-generators-threa
【在 q****x 的大作中提到】 : 那不就是lazy evaluation。 : 所谓generator不就是一个对象,封装了输入,算子,迭代子。 : 这种情况下线程安全性有问题吧。
|
m****n 发帖数: 1104 | 5
不需要同时evaluate所有的,要一个evaluate一个,完了就扔了。所以generator不能
用两次的。
【在 q****x 的大作中提到】 : 那不就是lazy evaluation。 : 所谓generator不就是一个对象,封装了输入,算子,迭代子。 : 这种情况下线程安全性有问题吧。
|