关于python中的列表的问题:我在该列表中有一个程序正在生成并分配给另一个变量,但是对于两个变量仍然获得相同的输出...无法理解其功能。
代码:
def extendList (val, list=[]):
list.append(val)
return list
list1 = extendList (10)
list2 = extendList (123, [])
list3 = extendList ('a')
print list1, list2, list3
答案 0 :(得分:0)
在命令中
def extentList (val, list=[]):
列表变量仅在一次进行初始化-在首次调用后仍保持不变。
将代码替换为
def extentList (val, list=None):
if list is None:
list = []
list.append(val)
return list
请参见Python教程中的Default parameter values are evaluated when the function definition is executed:
... if the function modifies the object (e.g. by appending an item to a list), the default value is in effect modified...
在print list1
之后紧跟list1 = ...
放置print list2
,在list2 = ...
之后紧跟list1
,以查看list3
和list1
是相同列表-您使用默认参数创建了list3
和list1 = extendList (10)
print list1
list2 = extendList (123, [])
print list2
list3 = extendList ('a')
print list1, list2, list3
,并且使用了默认参数-列表-仅初始化一次(即也被创建)一次:
[10]
[123]
[10, 'a'] [123] [10, 'a']
输出:
items( input { id: $id, category: $category, url: $url, alias: $alias, name: $name } )
答案 1 :(得分:0)
发生这种情况是由于默认列表值。列表值在函数的每个调用处均保持不变
“ Python的默认参数在定义函数时进行一次评估,而不是在每次调用函数时都进行评估(例如Ruby)。这意味着,如果您使用可变的默认参数并对它进行突变,则将已将该对象也更改为将来对该函数的所有调用。”
来自here