当前位置:  开发笔记 > 编程语言 > 正文

Python:函数内局部变量的生命周期(内存范围)

如何解决《Python:函数内局部变量的生命周期(内存范围)》经验,为你挑选了1个好方法。



1> The Obscure ..:

    some_dict每次调用函数时,都会在内存中创建字典.

    它在函数返回时被释放.

    每次调用函数时重新创建字典真的很昂贵,特别是如果字典很大的话.您可以在调用函数中创建字典(假设调用者本身只调用一次)并将其作为参数传递给函数some_function().

例如,考虑caller()调用函数的函数callee(some_function()在您的问题中),如

def caller():
    callee()

从您的使用案例中,我们想callee()多次调用,我们需要重用相同的字典callee().让我们来看看正常的使用案例.

1.生成字典callee().这是您问题中的示例.

def caller():
    for loop:    
        callee()

def callee(dictionary):
    generate dictionary
    do something with dictionary

在这种情况下,每次callee()调用时,都必须生成一个新的字典.这是因为只要callee()返回,它的所有局部变量都会被释放.因此,您不能在不同的callee()s 之间"重用"相同的字典.

2.字典生成caller()并作为参数传递给callee().

def caller():
    generate dictionary
    for loop:    
        callee(dictionary)

def callee(dictionary):
    do something with dictionary

在这种情况下,您将生成字典caller(),然后将其传递给每个callee()函数.因此,每次调用时callee(),都不需要重新生成字典.

字典通过引用传递,因此每次调用时都不会传递大量数据结构callee().我不打算深入讨论这个问题(你可以在这里找到一个很好的解释),但实质上,将字典作为参数传递的成本可以忽略不计callee().

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有