相关疑难解决方法(0)

类和实例属性有什么区别?

是否有任何有意义的区别:

class A(object):
    foo = 5   # some default value
Run Code Online (Sandbox Code Playgroud)

class B(object):
    def __init__(self, foo=5):
        self.foo = foo
Run Code Online (Sandbox Code Playgroud)

如果您要创建大量实例,那么这两种样式的性能或空间要求是否存在差异?当您阅读代码时,您是否认为两种样式的含义有显着差异?

python attributes member-variables

127
推荐指数
4
解决办法
6万
查看次数

什么是避免作为空列表的默认参数的pythonic方法?

有时,使用默认参数(即空列表)似乎很自然.然而,Python在这些情况下会出现意外行为.

例如,我有一个功能:

def my_func(working_list = []):
    working_list.append("a")
    print(working_list)
Run Code Online (Sandbox Code Playgroud)

第一次使用默认值调用它将起作用,但之后的调用将使用不断更新的列表.

那么,获得我想要的行为的pythonic方法是什么(每个调用都有一个新的列表)?

python python-3.x

90
推荐指数
4
解决办法
4万
查看次数

python函数默认参数只评估一次?

我是一个python初学者,阅读'python tutorial',它说如果我们有一个函数:

def f(a, L=[]):
     L.append(a)
     return L
print f(1)
print f(2)
print f(3)
Run Code Online (Sandbox Code Playgroud)

这将打印

[1]
[1, 2]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

因为默认值只计算一次而list是可变对象.我能理解.

它说继续,如果我们不希望在后续调用之间共享默认值,我们可以:

def f(a, L=None):
   if L is None:           #line  2
       L = []            
   L.append(a)
   return L
print f(1)            
print f(2)
print f(3)
Run Code Online (Sandbox Code Playgroud)

这将输出:

[1]
[2]
[3]
Run Code Online (Sandbox Code Playgroud)

为什么呢?怎么解释这个.我们知道默认值只是被评估once,当我们调用f(2)时,L不是None而且if(第2行)不能为真,所以L.append(a)== [1,2].我可以猜出由于某种原因再次评估默认值,但是什么是'某种原因',只是因为python解释器看到了if L is None: L = []

python parameters function

30
推荐指数
3
解决办法
4908
查看次数