您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python类型提示语法如何/为什么起作用?

Python类型提示语法如何/为什么起作用?

这里没有类型提示。您所做的只是提供 注释 ;这些是在PEP 3107中引入的(仅在Python 3中,在Python 2中不支持功能);它们允许您注释参数并使用任意信息返回值以供以后检查:

>>> greeting.__annotations__
{'name': <class 'str'>, 'return': <class 'str'>}

否则,此处完全不咨询他们。相反,您收到的错误消息来自尝试 函数主体中 串联字符串和整数值:

>>> 'Hello ' + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly

这是一个自定义类型错误,旨在提供有关str+int级联失败的其他信息;str.__add__对于任何非以下类型,该方法都会将其抛出str

>>> ''.__add__(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
>>> ''.__add__(True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'bool' object to str implicitly

然后,PEP 484建议利用这些注释,通过 其他工具 进行实际的静态类型检查,但作为PEP的介绍如下:

尽管这些注释可以在运行时通过常用__annotations__属性使用, 但在运行时不会进行类型检查 。相反,该建议假设存在一个单独的脱机类型检查器,用户可以自愿在其源代码上运行该检查器。本质上,这种类型检查器可充当非常强大的linter。

强调原始。

PEP受到使用PEP 3107注释的现有工具的启发;特别是mypy项目(通过采用PEP 484循环返回),还包括PyCharm IDEpytypedecl项目中类型提示支持。请参阅Guido van Rossum发动这项工作原始电子邮件以及后续电子邮件

mypy显然可以通过预处理注释来支持Python 2,在为源字节进行字节编译之前将其删除,但是通常您不能使用本来可以在Python 2中使用的语法Python代码

PEP 484还描述了存根文件的使用,该存根文件位于常规Python文件的旁边。它们使用.pyi扩展名,并且仅包含签名(带有类型提示),而使主.py文件注释自由,因此可以在Python 2上使用(前提是您另外编写了Polyglot Python代码)。

python 2022/1/1 18:34:51 有231人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶