Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 - Fatal编程技术网

Python 为什么不每次都列一个新的清单呢?

Python 为什么不每次都列一个新的清单呢?,python,Python,为什么它添加到apple中而不是创建一个新列表?答案是函数参数的值在定义时只计算一次。因此,只有在首次定义foo时,参数才会初始化为其默认值。然后它调用foo,并将继续使用最初初始化bar的相同列表 解决方法如下: >>> def foo(bar=[]): ... bar.append("apple") ... return bar >>> foo() ["apple"] >>> foo() ["appl

为什么它添加到apple中而不是创建一个新列表?

答案是函数参数的值在定义时只计算一次。因此,只有在首次定义foo时,参数才会初始化为其默认值。然后它调用foo,并将继续使用最初初始化bar的相同列表

解决方法如下:

>>> def foo(bar=[]):        
...    bar.append("apple")    
...    return bar

>>> foo()
["apple"]
>>> foo()
["apple", "apple"]
>>> foo()
["apple", "apple", "apple"]
>>> def foo(bar=None):
...    if bar is None:      # or if not bar:
...        bar = []
...    bar.append("baz")
...    return bar
...
>>> foo()
["baz"]
>>> foo()
["baz"]
>>> foo()
["baz"]