Python中的类型提示有什么好处?

时间:2016-07-06 05:41:09

标签: python types pep

我正在阅读PEP 484 -- Type Hints

实现它时,该函数指定它接受并返回的参数类型。

def greeting(name: str) -> str:
    return 'Hello ' + name

我的问题是,如果实现了Python的类型提示有什么好处?

我使用TypeScript,其中类型很有用(因为JavaScript在类型识别方面有点愚蠢),而Python对类型有点聪明,如果实现,可以给Python带来哪些好处?这会改善python的性能吗?

2 个答案:

答案 0 :(得分:7)

类型提示可以帮助:

  1. 数据验证和代码质量(您也可以使用断言)。
  2. 代码的速度,如果编译代码,可以采取一些假设并更好地进行内存管理。
  3. 文档代码和可读性。
  4. 我普遍缺乏类型提示也有好处:

    1. 更快的原型设计。
    2. 在大多数情况下缺乏需要类型提示 - 鸭总是鸭子 - 做变量会表现得不像鸭子会出现错误而没有类型提示。
    3. 可读性 - 在大多数情况下,我们确实不需要任何类型提示。
    4. 我认为类型提示是可选的并不是必需的,如Java,C ++ - 超过优化会杀死创造力 - 我们真的不需要关注变量的类型,而是首先考虑算法 - 我个人认为更好写一行代码为4来定义Java中的简单函数:)

      def f(x):
        return x * x
      

      相反

      int f(int x) 
      {
         return x * x
      }
      
      long f(long x) 
      {
         return x * x
      }
      
      long long f(int long) 
      {
         return x * x
      }
      

      ...或使用模板/泛型

答案 1 :(得分:7)

以类型函数

为例
def add1(x: int, y: int) -> int:
    return x + y

和一般功能。

def add2(x,y):
    return x + y

使用add1

上的mypy进行类型检查
add1("foo", "bar")

会导致

error: Argument 1 to "add1" has incompatible type "str"; expected "int"
error: Argument 2 to "add2" has incompatible type "str"; expected "int"

add2上的不同输入类型的输出,

>>> add2(1,2)
3

>>> add2("foo" ,"bar")
'foobar'

>>> add2(["foo"] ,['a', 'b'])
['foo', 'a', 'b']

>>> add2(("foo",) ,('a', 'b'))
('foo', 'a', 'b')

>>> add2(1.2, 2)
3.2

>>> add2(1.2, 2.3)
3.5

>>> add2("foo" ,['a', 'b'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in add
TypeError: cannot concatenate 'str' and 'list' objects

请注意add2是一般的。只有在执行该行后才会引发TypeError,您可以通过类型检查来避免这种情况。通过类型检查,您可以在最开始识别类型不匹配。

<强>优点:

  • 更容易调试==保存时间
  • 减少手动类型检查
  • 更轻松的文档

<强>缺点:

  • 交易Python代码之美。