一个函数中的一个函数是否会比单独定义这两个函数占用更多的 RAM 内存?

Will a function within a function take up more RAM memory than if the 2 functions are defined separately?

假设我有以下代码和函数内的函数(第一种方法):

def a:
    # do something and local variables gets created

    def b:
        # do something and local variables gets created

以及以下分别定义两个函数的代码(第二种方法):

def a:
    # do something and local variables gets created

def b:
    # do something and local variables gets created

当我运行代码时,无论是用上面的第一种方法还是第二种方法,哪种方法可能会占用更多的RAM内存?或者在这种情况下,没关系,应该大致相同?

非常感谢。

内部函数称为闭包,不应仅用于隐藏模块其余部分的函数。这部分是样式问题,但实际上 python 每次调用外部函数时都会为内部函数创建一个新的函数对象。

这取决于你调用外部函数的次数,以及它是否return嵌套函数。

如果你有一个嵌套的函数,语句def b(...)不仅会为名称b分配一个新的函数对象,还会创建一个封装a的命名空间的闭包供 b 访问。如果 a 没有 return b,这在 a 的执行期间是临时的,即使其成为非本地的。

如果 b 是一个单独的函数对象,当导入时模块代码为 运行 时,它只会分配给一个函数对象一次。它没有非本地闭包命名空间。

在这两种情况下,b 的代码在模块导入时只被编译成一个代码对象一次。相比之下,创建的函数对象相对便宜。函数对象引用代码单例。在这两种情况下,函数对象也将始终引用全局命名空间。

所以如果b嵌套在a中,解释器会在每次调用a时围绕b的代码创建一个新的函数对象。它还将为 a.

的命名空间创建一个闭包

如果您打算至少调用一次 a,非嵌套版本的内存占用较少,因为它不会创建闭包或创建多个函数对象。

然而,有时,为了易读性、可维护性或其他考虑因素,设计决策会牺牲一些速度和内存使用。毕竟您正在使用 python。例如,如果 b 应该隐藏在其余代码中,我可能会认为嵌套解决方案更好,尽管通常需要更多的内存和处理器。例如,ba 的实现细节,例如函数的递归部分。