【问题标题】:Python list - call function with different valuesPython list - 调用具有不同值的函数
【发布时间】:2022-11-01 14:11:54
【问题描述】:
def check(val, list=[]):
    list.append(val) 
    return list

list1=check("a")
list2=check("b",[])
list3=check("c")

如果我运行list1 并检查输出,它会显示["a"]

但是,如果我同时运行 list1list2list3 单元格并检查 list1 它显示 ['a','c'],有人可以解释为什么会这样吗?

【问题讨论】:

  • 它可以保存自己的列表,您可以在这里提供list2=check("b",[])
  • 请避免使用list 作为变量/参数名称。它是一个内置函数。但是您的实际问题是使用 [] 作为默认分配。该引用是在函数定义中创建的,并与后续调用保持一致。正确的技术是使用 None 作为默认值,并在函数开始时检查 None,并将其分配为 [] (一个新列表)。

标签: python


【解决方案1】:

这是执行此操作的正确方法:

def check(val, values=None):
    if values is None:
        values = []
    values.append(val)
    return values


list1 = check("a")
list2 = check("b", [])
list3 = check("c")

默认参数值不应该是可变的。你可以找到一个很好的解释here, 而list 是一个糟糕的变量名称,因为list 是一个内置类型,strsetdict 也是如此。

【讨论】:

  • 或许要指出 list 是变量的糟糕名称。
【解决方案2】:

似乎 list1 和 list3 共享相同的对象。

你可以试试这个:

def check(val, list=[]):
    list.append(val)
    print(hex(id(list)))
    return list

list1=check("a")
list2=check("b")
list3=check("c")

print(list1)
print(list2)
print(list3)

【讨论】:

  • 默认参数值不应该是可变的。它总是考虑记忆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
相关资源
最近更新 更多