我有一个将列表作为参数的python函数。如果我将参数的默认值设置为如下空列表:
def func(items=[]):
print items
皮林特会告诉我"危险的默认值[]作为参数"。所以我想知道这里的最佳实践是什么?
这是每一个Python新手都会碰上一两次的东西,皮林特阻止你写一个可怕的虫子真是太酷了!
使用None作为默认值:
def func(items=None):
if items is None:
items = []
print items
可变默认参数的问题在于,它将在函数的所有调用之间共享——请参见Python教程的相关部分中的"重要警告"。
啊,哇,我很惊讶人们知道这件事。=)我非常讨厌python的这个特性,以至于我编写了自己的decorator库来支持func(items=new([]))语法。
谢谢!看起来Python认为没有一个是与列表完全不同的类型,所以我想知道Python是否可以将一个参数的默认值设置为一个不同的类型(比如没有)(我知道Python是一个没有类型的语言,但是我来自C++…LOL)?
它与C++之类的强类型语言非常不同。只要把变量想象成引用对象的名称,所有的东西都是通过引用传递的。
@WIM:我认为您的意思是"静态的",而不是强烈的;Python是强类型但动态类型的。
谢谢,维姆!然后,当您使用一个变量时,如何确定它是一个实际的列表还是仍然保持其默认值"无&