Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 参数的默认值_Python_Function_Default Arguments - Fatal编程技术网

Python 参数的默认值

Python 参数的默认值,python,function,default-arguments,Python,Function,Default Arguments,可能重复: 考虑以下功能: def foo(L = []): L.append(1) print L def goo(a = 0): a += 1 print a 每次我调用foo时,它都会打印一个新列表,其中包含比上次更多的元素,例如: >>> foo() [1] >>> foo() [1, 1] >>> foo() [1, 1, 1] 现在考虑以下函数: def foo(L = []): L.append(1)

可能重复:

考虑以下功能:

def foo(L = []):
  L.append(1)
  print L
def goo(a = 0):
  a += 1
  print a
每次我调用foo时,它都会打印一个新列表,其中包含比上次更多的元素,例如:

>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]

现在考虑以下函数:

def foo(L = []):
  L.append(1)
  print L
def goo(a = 0):
  a += 1
  print a
当多次调用它时,我们得到以下图片:

>>> goo()
1
>>> goo()
1
>>> goo()
1
i、 e.它不会在每次调用时打印更大的值

这种看似不一致的行为背后的原因是什么?

另外,在第一个示例中,为什么函数在调用之间保持状态?如何证明反直觉行为的合理性?定义函数时,默认参数只计算一次。 因此,每次调用函数时,您都会得到相同的
list
对象

每次调用第二个函数时,您也会得到相同的
0
对象,但由于
int
是不可变的,因此当您添加
1
时,新对象需要绑定到

>>> def foo(L = []):
...   print id(L)
...   L.append(1)
...   print id(L)
...   print L
... 
>>> foo()
3077669452
3077669452
[1]
>>> foo()
3077669452
3077669452
[1, 1]
>>> foo()
3077669452
3077669452
[1, 1, 1]
vs


这并不能完全回答我的问题-我不明白为什么第二个示例(带有整数参数)会像它那样工作。>每次调用第二个函数时,您也会得到相同的0对象--那么为什么每次调用第一个函数时,我不能得到相同的[]对象?@Grigory:整数是不可变的,
some_int+=…
创建一个新的整数,而不是修改
some_int
a
以相同的
0
开始,每次调用函数时,如果没有给定参数,您只需将
a
更改为指向
0+1
。事实上,每次调用第一个函数时,您都会得到相同的对象。这就是为什么它“记得”它以前的内容。@delnan谢谢,这解释了一切。以及关于同一个问题的许多其他答案。为什么我们突然得到这个问题无数次?