python – lambda中的生成器行为是否可以抵御未来的变化?
发布时间:2020-12-20 11:20:43 所属栏目:Python 来源:网络整理
导读:我有以下功能: | def line_reader_iter(file_object):| while True:| a_line = file_object.readline()| if len(a_line)==0: raise StopIteration| yield a_line[:-1] 我说的某个地方: | line_reader = lambda: next(line_reader_iter(infile)) 显然,lambd
我有以下功能:
| def line_reader_iter(file_object): | while True: | a_line = file_object.readline() | if len(a_line)==0: raise StopIteration | yield a_line[:-1] 我说的某个地方: | line_reader = lambda: next(line_reader_iter(infile)) 显然,lambda只能运行,因为编译时与运行时行为之间似乎存在差异,这是非常受欢迎的:line_reader_iter()将对iterator对象的引用放入lambda表达式而不是创建生成器每次评估lambda时都对象.但是:这种便携且稳定的行为?我只是一个Python新手,我不知道我的代码是否在Python执行模型的灰色区域.有人可以赐福我吗? slarti 解决方法
我认为你实际上误解了为什么会这样.每次调用line_reader()时,都会创建一个新的line_reader_iter生成器.它似乎工作,因为你每次都使用相同的infile,每次调用readline()将返回文件的下一行.
请考虑以下更简单的示例: >>> counter = lambda: next(iter(range(10))) >>> counter() 0 >>> counter() # each time the lambda is called,a new range iter is created 0 您可以使用以下方法获得所需的行为: line_reader = line_reader_iter(infile).next 以下是我的范围示例的工作原理: >>> counter = iter(range(10)).next >>> counter() 0 >>> counter() # yay,we are actually using the same iterator 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |