2009-05-05 95 views
0

关键字参数的个数为什么如下:初始化Python中

class A(object): 
    def __init__(self, var=[]): 
     self._var = var 
     print 'var = %s %s' % (var, id(var)) 

a1 = A() 
a1._var.append('one') 

a2 = A() 

结果:

var = [] 182897439952 
var = ['one'] 182897439952 

我不为什么使用可选的,当它不使用列表的新实例理解关键字参数,谁能解释这个?

+3

它被一遍又一遍地解释。 – SilentGhost 2009-05-05 13:48:53

+1

解释的例子:http://stackoverflow.com/questions/530530/python-2-x-gotchas-and-landmines – 2009-05-05 13:54:11

回答

6

在创建函数本身时,函数定义中的空列表会创建一次。每次调用函数时都不会创建它。

如果你想要一个新的每一次,这样做:

class A(object): 
    def __init__(self, var=None): 
     if var is None: 
      var = [] 
     self._var = var 
2

这是完全错误的。你不能(有意义地)在函数声明中提供一个可变对象作为默认值。

class A(object): 
    def __init__(self, var=[]): 
     self._var = var 
     print 'var = %s %s' % (var, id(var)) 

你必须这样做。

class A(object): 
    def __init__(self, var=None): 
     self._var = var if var is not None else [] 
     print 'var = %s %s' % (var, id(var)) 
1

在函数定义的空列表创建一次,当时自己创建功能。每次调用函数时都不会创建它。

没错。要解决此分配问题无法定义函数定义并在函数体中检查无:

class A(object): 
    def __init__(self, var=None): 
     if var is None: 
      var = [] 
     self._var = var 
     print 'var = %s %s' % (var, id(var))