未检测到不可变(列表元组)内可变的危险默认值
Undetected dangerous default value for mutable inside immutable (tuple of lists)
为什么下面的代码在使用 pylint
时不会为 items
触发 dangerous-default-value
?这是pylint
的意外功能(即错误)吗?
def func(item, items=([],)):
items[0].append(item)
return items
我的理解是,这应该是一切手段,因为:
print(func(1))
# ([1],)
print(func(2))
# ([1, 2],)
是否有标准的清理方法,还是我必须自己做?
(注意:这只是 toy 代码来说明问题。)
似乎 pylint
仅针对非嵌套 list
、dict
和 set
触发 dangerous-default-value
,这是一个糟糕的 documented 行为,因为省略了 set
的行为,而以下:
def func(item, items=set()):
items[0].append(item)
return items
实际上会触发警告。
用于递归清理(嵌套)list
、dict
和 set
容器组合的 FlyingCircus package offers a freeze()
函数。
免责声明:我是该软件包的主要作者。
为什么下面的代码在使用 pylint
时不会为 items
触发 dangerous-default-value
?这是pylint
的意外功能(即错误)吗?
def func(item, items=([],)):
items[0].append(item)
return items
我的理解是,这应该是一切手段,因为:
print(func(1))
# ([1],)
print(func(2))
# ([1, 2],)
是否有标准的清理方法,还是我必须自己做?
(注意:这只是 toy 代码来说明问题。)
似乎 pylint
仅针对非嵌套 list
、dict
和 set
触发 dangerous-default-value
,这是一个糟糕的 documented 行为,因为省略了 set
的行为,而以下:
def func(item, items=set()):
items[0].append(item)
return items
实际上会触发警告。
用于递归清理(嵌套)list
、dict
和 set
容器组合的 FlyingCircus package offers a freeze()
函数。
免责声明:我是该软件包的主要作者。