如何获得有关列表是可变默认参数的警告?

Pas*_* T. 8 python static-analysis

我在不知情的情况下不小心使用了可变的默认参数

有没有可以发现这一点并警告我的 linter 或工具?

pig*_*mer 8

flake8-bugbear、Pylint、PyCharm 和 Pyright 可以检测到这一点:

  • Bugbear 有B006(不要使用可变数据结构作为参数默认值)。

    不要使用可变数据结构作为参数默认值。它们是在函数定义期间创建的。对该函数的所有调用都重用该数据结构的这一实例,从而保留它们之间的更改。

  • Pylint 有W0102(危险的默认值)。

    当在参数的默认值中检测到列表或字典等可变值时使用。

  • 皮赖特有reportCallInDefaultInitializer.

    生成或抑制默认值初始化表达式中的函数调用、列表表达式、集合表达式或字典表达式的诊断。此类调用可以屏蔽在模块初始化时执行的昂贵操作。

    这可以满足您的要求,但请注意,它还会检查默认参数中的函数调用。

  • PyCharm 的Default 参数的值是 mutable

    此检查检测何时在参数的默认值中检测到列表或字典等可变值。

    默认参数值仅在函数定义时计算一次,这意味着修改参数的默认值将影响该函数的所有后续调用。

    不幸的是,我找不到这方面的在线文档。如果您有 PyCharm,则可以访问所有检查并导航至此检查以查找文档。