您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在python发生器体中打开手柄的寿命

5b51 2022/1/14 8:22:01 python 字数 3240 阅读 522 来源 www.jb51.cc/python

我有关于生成器和/或python的执行模型的问题.给出如下内容:def g(filename): with open(filename) as handle: for line in handle: yield some_trasformation_on(line) 我的主要困惑是:如果处理会发生什么res =

概述

我有关于生成器和/或python的执行模型的问题.

给出如下内容

def g(filename):
    with open(filename) as handle:
        for line in handle:
            yield some_trasformation_on(line)

我的主要困惑是:如果处理会发生什么

res = g()
print(next(res))

只被召唤一次?手柄在程序的使用寿命期间是否保持打开状态?如果我们在发电机组中分配了稀缺资源怎么办?主题数据库处理?

也许我认为发电机就像引擎盖下的功能一样.

如上所述,该文件将在程序的生命周期内保持打开状态.虽然你有一个res变量的引用,它保持生成器堆栈帧是活动的,所以获取with语句来关闭文件的唯一方法是继续调用next(),直到for循环正常结束.

如何清理发电机

设计用于发电机清理的工具是generator.close(),它在发电机内部引发了GeneratorExit.

这是一些工作代码,以说明如何完成它:

def genfunc(filename):
    try:
        with open(filename) as datafile:
            for line in datafile:
                yield len(line)
    finally:
        print('Status: %s' % datafile.closed)

这是一个示例会话,显示实际发生的关闭操作:

>>> g = genfunc('somefile.txt')
>>> next(g)
23
>>> g.close()
Status: True

总结

以上是编程之家为你收集整理的在python发生器体中打开手柄的寿命全部内容,希望文章能够帮你解决在python发生器体中打开手柄的寿命所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶