|
|
|
|
 为什么这两种方法有区别!? - suds [ 2006-08-18 14:41 | 964 byte(s)]
 Re: 为什么这两种方法有区别!? - limodou [ 2006-08-21 13:01 | 232 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
刚学Pyhthon.对于函数申明里面有点疑惑!
def f(a, L=[]):
L.append(a)
return L
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
这两种函数申明 为什么前一种在不断调用以后L中会拥有所有调用的时候传入的参数的值!
而后一种情况却只有最后一次调用的值呢!?
Doc上面有一句话
Important warning: The default value is evaluated only once
那么这句话的意思到底是什么呢?
如果说缺省值只被使用一次!那么第二个函数里面的L = []应该只会被执行一次。因为第二次call这个函数的时候L应该不是None了(because The default value is evaluated only once)
但是很奇怪第二个函数的真实执行情况却好像不是这样的,它的L=[]应该被执行了多次。因为只有最后一次调用的时候的传入参数的值被记录了下来!
有哪位抽个空解答一下我的疑惑吧!
如果问题太白痴,还请海涵!
先谢了!
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
因为你的缺省值是放在函数的参数中,而python在编译函数时会对其进行计算,以后缺省值就不再重新计算了。因此如果你的参数是一个可变值的话,一旦在函数中修改了它的值,那么这种修改就保存下来。下一次调用仍然会使用变化后的值,因此就一直变下去。
|
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
|