Python 中类型提示的好处是啥? [关闭]
Posted
技术标签:
【中文标题】Python 中类型提示的好处是啥? [关闭]【英文标题】:What will be the benefits of type hinting in Python? [closed]Python 中类型提示的好处是什么? [关闭] 【发布时间】:2016-11-08 02:09:35 【问题描述】:我正在阅读PEP 484 -- Type Hints
当它被实现时,函数指定它接受和返回的参数类型。
def greeting(name: str) -> str:
return 'Hello ' + name
我的问题是,如果使用 Python 进行类型提示有什么好处?
我在类型有用的地方使用了 TypeScript(因为 javascript 在类型识别方面有点愚蠢),而 Python 在类型方面有点智能,如果实现类型提示会给 Python 带来什么好处?这会提高 python 的性能吗?
【问题讨论】:
从你链接的同一个 pep “相反,该提案假设存在一个单独的离线类型检查器,用户可以自愿运行他们的源代码。本质上,这样的类型检查器充当了一个非常强大的 linter”我会说它的价值是进行构建时语法检查,以避免那些可怕的运行时错误。 我记得在某处看到其中一个意图是工具和框架。例如,GUI 框架可能能够检查 int 输入字段是否设置为仅验证/允许。 【参考方案1】:以类型化函数为例,
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 代码之美。【讨论】:
【参考方案2】:类型提示可以帮助:
-
数据验证和代码质量(您也可以使用 assert)。
编译代码时的代码速度,因为可以采取一些假设和更好的内存管理。
文档代码和可读性。
我一般缺乏类型提示也是有好处的:
-
原型制作速度更快。
在大多数情况下不需要类型提示 - 鸭子总是鸭子 - 做它变量的行为不会像鸭子那样没有类型提示会出错。
可读性 - 实际上我们在大多数情况下不需要任何类型提示。
我认为类型提示是可选的而不像 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
...或使用模板/泛型
【讨论】:
以上是关于Python 中类型提示的好处是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章