gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:39:39 25 4
gpt4 key购买 nike

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

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 内存?或者在这种情况下,没关系,应该大致相同?

非常感谢。

最佳答案

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

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

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

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

所以如果b嵌套在a中,每次解释器都会围绕b的代码创建一个新的函数对象a 被调用。它还将为 a 的命名空间创建一个闭包。

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

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

关于python - 一个函数中的一个函数是否会比单独定义这两个函数占用更多的 RAM 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61981928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com