some_dict
什么时候在内存中创建了字典some_dict
? (第一次调用该函数?)
字典android:largeHeap="true"
何时被销毁/取消分配? (当函数返回时?)
如果是这样,是否意味着每次调用函数时都会创建字典对象?
在学习/处理python时,我应该担心这些事吗?
我在哪里可以了解某种语言的详细信息?我试着查看文档,但找不到我要找的东西。
提前感谢您,如果您能回答上述所有4个问题,我们将不胜感激!
答案 0 :(得分:11)
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()
时都不会传递庞大的数据结构。我不打算深入讨论这个问题(你可以找到一个很好的解释here),但实质上,将字典作为参数传递给callee()
可以忽略不计。< / p>
答案 1 :(得分:3)
字典some_dict何时被销毁/取消分配? (当。。。的时候 函数返回?)
首先,当您离开该范围时,会破坏所有局部变量。
例如,在您返回的函数中,您将失去对some_dict
定义的变量的所有引用。因为您要返回a
,如果您没有像a_var = some_function()
那样a
引用a_var
,那么您将失去a
。< / p>
字典some_dict何时在内存中创建? (第一次 该函数被调用?)
some_dict = {&#39;随机&#39;:&#39;值&#39;}#在这里为每个方法调用。
在学习/处理python时,我应该担心这些事吗?
是的,请查看以下示例
>>> dictionary = {1: 1, 2: 2}
>>> function()
>>> def function():
dictionary = {1: 2, 2:1}
print dictionary
>>> function()
{1: 2, 2: 1}
>>> dictionary
{1: 1, 2: 2}
这里你可能假设你正在重新分配字典但是python正在创建一个本地字典并且在你从函数返回后很快就会丢失
如何克服上述问题,使用全局它会告诉您正在尝试在函数外部引用对象定义。
>>> def function():
global dictionary
dictionary = {1: 2, 2:1}
print dictionary
>>> function()
{1: 2, 2: 1}
>>> dictionary
{1: 2, 2: 1}
我在哪里可以了解某种语言的详细信息?我试过看了 文档但无法找到我要找的东西。
可能问题应该是how do I learn such details
,操作简单,理解文档并重新阅读。