关于显式删除Python框架的问题

2024-05-16 08:20:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python的documentaton中找到了这一段:

enter image description here

我有几个问题:

  1. 为什么finally使破坏具有确定性?没有{}的{}和{}之间有什么区别

  2. 假设我有很多使用frame的函数,我想创建一个decorator来帮助我避免每次都要写del frame,比如:

    def del_frame(f):
      def inner(frame):
        try:
          return f(frame)
        finally:
          del frame
    
      return inner
    
    @del_frame
    def function_that_uses_frame(frame):
      ...
    

    尽管我没有删除frame内的function_that_uses_frame,但它是否符合框架销毁的要求


Tags: 函数returnthatdeffunctiondecoratorframeinner
1条回答
网友
1楼 · 发布于 2024-05-16 08:20:06

与核心开发人员交谈。原来我误解了文档

用户需要显式del frame或调用frame.clear()的唯一情况是当它导致循环引用时。与给定示例类似,因为frame包含局部变量frame本身,因此导致循环引用

def handle_stackframe_without_leak():
    frame = inspect.currentframe()
    try:
        # do something with the frame
    finally:
        del frame

如果没有循环引用,而您只是从其他地方处理帧对象,如

def function_that_uses_frame(frame):
  ...

没有必要做任何事

相关问题 更多 >