如何在Python中使用幻数(静态分析代码)?

时间:2018-10-16 23:54:00

标签: python static-analysis pylint

谷歌搜索“圆柱魔术数字”没有返回任何有用的信息。有没有办法为magic numbers编写Python代码?

(我放了,但答案可以在任何Python linter中。)

1 个答案:

答案 0 :(得分:1)

最简单的方法是构建一个Python语言令牌生成器,并挑选出所有常量令牌。

我们的源代码搜索引擎可以在语言标记器的驱动下,从大型文件中搜索语言标记(它有40种,包括Python 2和3)。一种是通过陈述令牌序列(例如

)上的约束来形成查询
 I=*abc* '('

的意思是“查找包含字母'abc'和后跟左括号的标识符。”并打印出找到的实例。 [此类查询会自动忽略空格和注释标记]

您想要的查询可以表示为:

 N>2

的意思是,假设数字0和1不符合“魔术常数”,即“找到值大于2的数字令牌”。 (恕我直言,他们和其他人一样神奇,但是有意见分歧的余地,我想提供一个并非完全无关紧要的例子。)

您可以使用词法分析器生成器(请参见“ Flex”)复制此代码,并在其顶部添加一些自定义代码以过滤数字令牌。