Python静态类型不起作用

时间:2016-05-30 13:26:11

标签: python python-3.x static-typing

我发现Python打算支持静态类型,但它仍处于测试阶段。 我用python 3.4.3尝试了下面的代码:

def somme(a: int, b: int) -> int:
    return a + b

支持语法,但我没有得到预期的结果。如果我输入somme('1', '3')我会得到13,而我应该TypeError例外int variable expected

有谁知道它为什么不起作用?

2 个答案:

答案 0 :(得分:10)

功能注释有注释,仅此而已。它们是关于预期用途的文档。就像它在PEP 3107中所说的那样,该机制提供了一种指定函数参数和返回值的单一标准方法,取代了各种特殊工具和库。

但是接着说:

  

功能注释只不过是一种关联方式   任意Python表达式,包含函数的各个部分   编译时。

     

Python本身并没有附加任何特定含义或   注释的意义。离开它自己,Python简单地做   这些表达式可用于访问函数中所述   下面的注释。

PEP 484添加了更多使用这些注释来标记类型的约定和工具,在Python 3.5中采用。但仍然没有语言本身的运行时检查:它“包括对离线类型检查器的支持,例如mypy”。

也就是说,在使用这些注释后,您可以运行第三方类型检查程序来检查您的代码是否符合带注释的类型。将这些注释构建到语言中应该可以使各种IDE更容易提供此服务。

答案 1 :(得分:5)

实际上,你不应该在这里进行静态输入。您编写的代码实际上是一种简单的文档形式和#34;类型提示",正如here所解释的那样。引用那个PEP:

  

虽然这些注释在运行时通过常用的 annotations 属性可用,但在运行时不会进行类型检查。相反,该提议假定存在一个单独的离线类型检查器,用户可以自动运行其源代码。从本质上讲,这种类型的检查器就像一个非常强大的linter。 (虽然个别用户当然可以在运行时使用类似的检查器来进行设计合同执行或JIT优化,但这些工具还不够成熟。)

换句话说,它的开发是为了支持第三方库,它实际上会为您进行检查。虽然我的一位朋友经常使用MyPy来实现它,但我从未对Python中的静态类型感到烦恼。这可能是您正在寻找的。

修改

安装:可以使用pip安装MyPy:

pip install mypy-lang

用法:您可以按照以下方式对程序进行输入检查:

~$ mypy my_script.py