翻译更严格

时间:2010-06-13 21:32:41

标签: python

今天,我在代码中修复了一个愚蠢的错误。很简单,问题是:

def f():
    return 2

2 == f

我忘了在句子中写括号,所以我将指针函数与数字进行了比较。

好的,我的问题:

有没有办法更改解释器以更严格的代码?显示更多警告,例如......

谢谢^^

4 个答案:

答案 0 :(得分:5)

Python是一种动态语言,您显示的构造完全有效(函数不等于2)。没有严格的模式。

答案 1 :(得分:3)

口译员不应发出警告。可以将f重新分配给整数,然后检查完​​全有意义:

Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) 
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def f():
...     return 2
... 
>>> 2 == f
False
>>> f = 2
>>> 2 == f
True

答案 2 :(得分:3)

使用动态类型语言的一个缺点是语言环境在看到语句时很少或根本没有关于事物类型的信息,因此它在看到它时不会发出警告,只有在声明已经执行。

由于各种原因,所有类型都可以非常方便地与所有其他类型进行比较以获得平等。它使异构容器更容易编写。因此,将一个函数与一个整数进行比较是一个定义的事情,因为这可能发生在很多有用的情况下,解释器在运行时无法真正给你一个警告。虽然构造是有问题的,但是当它看到语句时(而不是执行它)它不会给你一个警告,因为它没有必要的类型信息来发出警告。

答案 3 :(得分:1)

您正在将函数与整数进行比较,这完全有效。在这种情况下,条件将始终为False,因为它将比较对象标识。在Python中,函数永远不知道它们正在获得什么类型,并且只是盲目地比较它们,这允许多态行为。除了切换到静态类型的语言之外,没有办法禁用它。