Discuss / Python / 一个问题

一个问题

Topic source

原文:原因解释如下:

Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

函数中L的定义应该属于局部作用域吧,调用函数add_end(L=[])时,代码执行到return后局部作用域被销毁,再次调用时产生新的作用域定义L,为什么L会变?

花泽的类

#2 Created at ... [Delete] [Delete and Lock User]

函数中L的定义应该属于该函数的局部作用域,发生改变时会在该函数内部被记下来。

局部作用域是没错,但是局部作用域的意义是说局部变量创建后初始化值的确定方式,局部作用域是在函数定义时确定的,可能会有销毁说法,就算要销毁貌似也要等方法出方法区的时候吧.... 所以 参数默认值在函数定义时就已经创建了,如果是引用型数据,创建在了堆中,函数调用时 如果要使用默认参数,就让局部变量指向这个引用内容,所以修改了这个引用的内容,自然会影响该方法后续调用时对应局部变量的值


  • 1

Reply