未检测到的可变内部不可变的危险默认值(列表的元组)

问题描述 投票:0回答:1

为什么下面的代码在使用dangerous-default-value时不会触发itemspylint?这是pylint意外功能(即bug)吗?

def func(item, items=([],)):
    items[0].append(item)
    return items

我的理解是,应该采取一切手段,因为:

print(func(1))
# ([1],)
print(func(2))
# ([1, 2],)

是否有标准的方法可以对此进行消毒,或者我必须自己进行消毒?

((Note:这只是toy代码来说明问题。)

python pylint
1个回答
0
投票

[似乎pylint仅针对未嵌套的dangerous-default-valuelistdict触发set,并且这是documented较差的行为,因为省略了set的行为,而以下:

def func(item, items=set()):
    items[0].append(item)
    return items

实际上会触发警告。


FlyingCircus程序包提供了freeze()函数,用于递归清除(嵌套)freeze()listdict容器的组合。

免责声明:我是该软件包的主要作者。

© www.soinside.com 2019 - 2024. All rights reserved.