def some_function():
some_dict = {'random': 'values'}
a = some_dict['random']
return a
字典
some_dict
是什么时候在内存中创建的? (第一次调用函数?)字典
some_dict
何时销毁/解除分配? (函数什么时候返回?)
如果是这样,是否意味着每次调用函数时都会创建字典对象?
在学习/处理python的时候需要担心这些事情吗?
- 处理此类情况的最佳做法是什么?是不是最好全局创建字典,避免每次调用函数时创建和销毁字典?
我在哪里可以了解这种语言的详细信息?我尝试查看文档,但找不到我要查找的内容。
如果您能回答上述所有 4 个问题,我们将不胜感激!
最佳答案
- 每次调用函数时,都会在内存中创建字典
some_dict
。 - 函数返回时释放。
- 每次调用函数时都重新创建字典确实很昂贵,尤其是在字典很大的情况下。您可以改为在调用者函数中创建字典(假设调用者本身只被调用一次)并将其作为参数传递给函数
some_function()
。
例如,考虑函数 caller()
调用函数 callee
(some_function()
在你的问题),如
def caller():
callee()
从你的用例来看,我们要多次调用callee()
,我们需要在callee()
中复用同一个字典。让我们来看看正常的使用案例。
1.字典在callee()
中生成。这是您问题中的示例。
def caller():
for loop:
callee()
def callee():
generate dictionary
do something with dictionary
在这种情况下,每次调用 callee()
时,您都必须生成一个新字典。这是因为一旦 callee()
返回,它的所有局部变量都会被释放。因此,您不能在不同的 callee()
之间“重用”同一个字典。
2.字典在caller()
中生成,并作为参数传递给callee()
。
def caller():
generate dictionary
for loop:
callee(dictionary)
def callee(dictionary):
do something with dictionary
在这种情况下,您将在 caller()
中生成一次字典,然后将其传递给每个单独的 callee()
函数。因此,每次调用 callee()
时,都不需要重新生成字典。
字典是通过引用传递的,因此每次调用 callee()
时都不会传递庞大的数据结构。我不会对此进行深入讨论(您可以找到一个很好的解释 here),但本质上,将字典作为参数传递给 callee()
的成本可以忽略不计。
关于python - 函数内局部变量的生命周期(内存范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34430314/