为什么下面的代码在使用dangerous-default-value
时不会触发items
的pylint
?这是pylint
的意外功能(即bug)吗?
def func(item, items=([],)):
items[0].append(item)
return items
我的理解是,应该采取一切手段,因为:
print(func(1))
# ([1],)
print(func(2))
# ([1, 2],)
是否有标准的方法可以对此进行消毒,或者我必须自己进行消毒?
((Note:这只是toy代码来说明问题。)
[似乎pylint
仅针对未嵌套的dangerous-default-value
,list
和dict
触发set
,并且这是documented较差的行为,因为省略了set
的行为,而以下:
def func(item, items=set()):
items[0].append(item)
return items
实际上会触发警告。
FlyingCircus程序包提供了freeze()
函数,用于递归清除(嵌套)freeze()
,list
和dict
容器的组合。
免责声明:我是该软件包的主要作者。