显式类型的Python?

时间:2014-03-13 07:27:13

标签: python types strong-typing static-typing rpython

我更喜欢Python的语法糖;和标准库函数。

然而,我不喜欢的一个特征;是隐式输入。

是否存在带有显式输入的Python分布;哪个仍然兼容例如:PyPi上的包?

[我正在调查RPython]

4 个答案:

答案 0 :(得分:3)

简短的回答是否定的。您要求的内容深深嵌入到Python中,并且无法在不改变语言的情况下进行更改,以至于不会成为Python。

我假设您不喜欢在重新分配时重新输入的变量?如果这是您的代码问题,您可以考虑其他方法来检查这一点。

答案 1 :(得分:3)

从python 3开始,使用类型注释的能力被引入到PEP 3017的python标准中。快进到python 3.5和 PEP 0484 构建于此基础上,引入类型提示和typing模块,使模块能够指定变量的类型或返回类型一个功能。

from typing import Iterator

def fib(n: int) -> Iterator[int]:
    a, b = 0, 1
    while a < n:
        yield a
        a, b = b, a + b

以上示例取自https://pawelmhm.github.io

根据484注释:

  

虽然这些注释在运行时可以通常使用   __annotations__属性,在运行时没有进行类型检查。相反,该提案假设存在单独的离线   用户可以自动运行其源代码的类型检查器。   从本质上讲,这种类型的检查器就像一个非常强大的linter。   (虽然个人用户当然可以使用   设计合同执行或JIT在运行时的类似检查程序   优化,这些工具尚未成熟。)

这意味着虽然python提供了这种静态类型&#34;的方法,但它并不在运行时强制执行,即当你运行程序时,python只是忽略你提供的任何类型规范并继续使用duck typing来推断类型。因此,您可以找到各种类型的lint检查器,您可以运行程序来检测类型的任何问题。

包含在python标准中输入的动机主要受mypy的影响,因此可能值得检查它们。他们还提供可能有用的examples

答案 2 :(得分:1)

不,你不能吃蛋糕和吃蛋糕。

Python很棒,因为它是动态输入的!期。 (这就是为什么它也有这么好的标准库)

静态类型语言只有2个优点1)速度 - 算法开始时是正确的,2)编译错误

至于1)

  • 使用PyPi,
  • 资料,
  • 使用ctype libs可获得出色的性能。

典型的只有10%或更少的代码是性能关键的。所有其他90%?享受动态打字的优势。

至于2)

  • 使用类(和合同)
  • 使用单元测试
  • 使用重构
  • 使用优秀的代码编辑器

典型的数据不符合标准数据类型,它们在允许存储的标准数据类型中过于严格或过于宽松。确保您自己验证数据。

单元测试必须用于算法测试,没有编译器可以为你做,并且应该捕获由错误的数据类型引起的任何问题(并且与编译器不同,它们的粒度与你需要的一样)

当您不确定给定的更改是否会破坏您的代码时,重构可以解决所有这些问题(同样,强类型数据也无法保证这一点。)

好的代码编辑器可以解决很多问题......使用Sublime Text一段时间。然后你会知道我的意思。

(可以肯定的是,我不会给你答案你想要的。但我会质疑你的需求,尤其是那些你没有包含在你的问题中的需求)

答案 3 :(得分:-2)

由于评论有限......

作为一种解释型语言,Python的定义是弱类型的。这对于程序员来说可以预先防范潜在的语法错误并不是一件坏事,但实际上这不会阻止逻辑错误的发生,从而使得这一点毫无意义。

尽管paper on RPython使其成为重点,但它主要关注面向对象编程。你必须记住,Python更像是OOP和功能编程的融合,也可能是其他的。

我鼓励reading of this page,这是非常有益的。