【发布时间】:2016-09-02 10:00:39
【问题描述】:
我正在练习在 Python 3.5 中使用类型提示。我的一位同事使用typing.Dict:
import typing
def change_bandwidths(new_bandwidths: typing.Dict,
user_id: int,
user_name: str) -> bool:
print(new_bandwidths, user_id, user_name)
return False
def my_change_bandwidths(new_bandwidths: dict,
user_id: int,
user_name: str) ->bool:
print(new_bandwidths, user_id, user_name)
return True
def main():
my_id, my_name = 23, "Tiras"
simple_dict = {"Hello": "Moon"}
change_bandwidths(simple_dict, my_id, my_name)
new_dict = {"new": "energy source"}
my_change_bandwidths(new_dict, my_id, my_name)
if __name__ == "__main__":
main()
它们都工作得很好,似乎没有区别。
我已阅读typing module documentation。
在typing.Dict 或dict 之间,我应该在程序中使用哪一个?
【问题讨论】:
-
请注意,Python 实际上并不强制 类型提示。它们只是提示,它们不会在运行时甚至编译时用于强制类型。 Python 可能是强类型(与弱类型相反),它也是动态类型(与严格类型相反)。见Is Python strongly typed?。像 mypy 这样的外部工具可以使用这些提示来帮助您编写更好的代码,但是,在一个称为静态分析的过程中。
-
@MartijnPieters 我曾经喜欢在我的代码中与 MyPy 一起使用类型提示,并假装我可以使用具有类型安全性的 Python。不幸的是,它让我 A)代码不适用于
-
@cat:Facebook 员工将类型提示引入 Python,因为我们在向 PHP 中添加相同的功能方面取得了巨大的成功(参见 hack)。任何人都笑过,从来没有用几个工程师建立过一个大项目。
-
@MartijnPieters 不,
def a(b: int) -> bool:在 Python 2.7 中是一个语法错误,我认为在旧版本的 Python 3 中也是一个语法错误。 -
@cat:您在这里谈论的是 函数注释,这是 Python 3.0 中添加的语法。因此,唯一出现语法错误的版本是 2.7,这就是 mypy 支持将该信息放入 cmets 的原因。
标签: python dictionary type-hinting python-typing