<p>“Python所信奉的运行时绑定哲学。。。使“使用严格”行为变得不必要[而且]特别不受欢迎”</p>
<p>总结得不错。谢谢。</p>
<p>本质上就是这样。静态分析工具对Python的帮助还不够大。</p>
<hr/>
<p><strong>编辑</strong></p>
<p>“我要求我们反思一下<em>为什么</em>我们不需要它,以及相关的Perl程序员为什么认为他们确实需要它。”</p>
<p>原因正是你已经给出的理由。我们不需要它,因为它没有帮助。很明显,你不喜欢这个答案,但没什么可说的了。编译时或预编译时检查根本没有帮助。</p>
<p>不过,既然你又花时间问了这个问题,我会为你已经给出的答案提供更多的证据。</p>
<p>我写Java几乎和写Python一样多。Java的静态类型检查并不能防止任何逻辑问题;它不利于满足性能需求;它也无助于满足用例。它甚至没有减少单元测试的数量。</p>
<p>虽然静态类型检查确实能发现方法偶尔的误用,但在Python中同样可以很快发现这一点。在Python中,您可以在单元测试时找到它,因为它不会运行。注意:我不是说错误的类型是通过许多聪明的单元测试发现的,我是说大多数错误的类型问题是通过未处理的异常发现的,在这些异常中,事情根本无法运行到足够远的地方来测试断言。</p>
<p>Pythonistas不浪费时间进行静态检查的原因很简单。我们不需要它。它没有任何价值。这是一个没有经济效益的分析水平。这并不能让我更能解决现实中的人们在处理真实数据时遇到的真正问题。</p>
<p>看看与语言(而不是问题域或库)相关的最流行的SO Python问题。</p>
<p><a href="https://stackoverflow.com/questions/26595/is-there-any-difference-between-foo-is-none-and-foo-none">Is there any difference between "foo is None" and "foo == None"?</a>--<code>==</code>对<code>is</code>。没有静态检查可以帮助解决这个问题。另外,请参见<a href="https://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python">Is there a difference between `==` and `is` in Python?</a></p>
<p><a href="https://stackoverflow.com/questions/36901/what-does-and-do-for-python-parameters">What does ** (double star) and * (star) do for parameters?</a>--<code>*x</code>给出一个列表,<code>**x</code>给出一个字典。如果您不知道这一点,当您尝试执行不适合这些类型的操作时,您的程序将立即终止。”如果你的程序从来没有做过“不合适”的事情呢。那你的程序就行了努夫说。</p>
<p><a href="https://stackoverflow.com/questions/36932/whats-the-best-way-to-implement-an-enum-in-python">How can I represent an 'Enum' in Python?</a>——这是对某种有限域类型的请求。一个具有类级别值的类几乎可以完成这项工作。”如果有人改变了任务怎么办”。容易建造。重写<code>__set__</code>以引发异常。是的,静态检查可能会发现这一点。不,在实践中,不会有人对枚举常量和变量感到困惑;当他们这样做时,很容易在运行时发现。”如果逻辑永远无法执行怎么办”。好吧,那是糟糕的设计和糟糕的单元测试。抛出编译器错误并放入从未测试过的错误逻辑,并不比动态语言中从未测试过的情况好多少。</p>
<p><a href="https://stackoverflow.com/questions/47789/generator-expressions-vs-list-comprehension">Generator Expressions vs. List Comprehension</a>--静态检查无助于解决此问题。</p>
<p><a href="https://stackoverflow.com/questions/470139/why-does-12-3-in-python">Why does 1+++2 = 3?</a>——静态检查不会发现这一点。尽管编译器进行了所有检查,C语言中的1+++2还是完全合法的。它在Python中与在C中不同,但同样合法。同样令人困惑。</p>
<p><a href="https://stackoverflow.com/questions/240178/unexpected-feature-in-a-python-list-of-lists">List of lists changes reflected across sublists unexpectedly</a>——这完全是概念性的。静态检查也不能帮助解决这个问题。Java等价物也会编译并表现得很糟糕。</p>