python – lambda中的生成器行为是否可以抵御未来的变化?

python – lambda中的生成器行为是否可以抵御未来的变化?,第1张

概述我有以下功能: | def line_reader_iter(file_object):| while True:| a_line = file_object.readline()| if len(a_line)==0: raise StopIteration| yield a_line[:-1] 我说的某个地方 我有以下功能:

|    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 created0

您可以使用以下方法获得所需的行为:

line_reader = line_reader_iter(infile).next

以下是我的范围示例的工作原理:

>>> counter = iter(range(10)).next>>> counter()0>>> counter()    # yay,we are actually using the same iterator1
总结

以上是内存溢出为你收集整理的python – lambda中的生成器行为是否可以抵御未来的变化?全部内容,希望文章能够帮你解决python – lambda中的生成器行为是否可以抵御未来的变化?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1192604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存