与可变/不可变的默认参数作斗争

时间:2019-08-06 11:10:25

标签: python-3.x parameter-passing variable-assignment

来自C ++并尝试学习Python,我遇到了可怕的可变默认参数问题。

_source

我知道列表的长度越来越长,这是因为L在函数定义期间(而不是在执行期间)仅被声明一次,并且L指向可变对象。

我不明白的是上述问题的解决方案是如何工作的:

<script> function GetFileSize() { var fi = document.getElementById('file'); // GET THE FILE INPUT. // VALIDATE OR CHECK IF ANY FILE IS SELECTED. if (fi.files.length > 0) { // RUN A LOOP TO CHECK EACH SELECTED FILE. for (var i = 0; i <= fi.files.length - 1; i++) { var fsize = fi.files.item(i).size; // THE SIZE OF THE FILE. document.getElementById('fp').innerHTML = document.getElementById('fp').innerHTML + '<br /> ' + '<b>' + Math.round((fsize / 1024)) + '</b> KB'; } } }

我不明白的原因是,为什么在第一次调用该函数后,L不会指向值为[1]的类型为list的对象。

听我说:

def func(L=[]): L.append(1) print(L)

在第二次迭代中,由于不再要声明L,所以L仍应指向值为[1]的List类型的对象。

我想念什么?

是因为L是不可变的,Python创建了一个指向空列表的新变量L,该空列表在函数返回并且垃圾收集器将None类型的L识别为默认参数之后被销毁,结果,不是“杀死”它吗?

非常感谢您提供任何类型的帮助。 亚历山德罗

0 个答案:

没有答案