python-3.x - 这段代码中的冒号 (:) 有什么作用?
问题描述
我在分配变量时不小心使用:
了而不是=
,我很惊讶它没有产生错误。例如,以下运行没有投诉:
Python 3.7.4 (default, Jul 9 2019, 18:15:00)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a: 'hello world'
>>>
然而,这似乎并没有真正做任何事情。我试过查看文档和教程,我只找到复合语句、字典理解和序列切片,我看不出这两种方法在这种情况下是如何应用的。
为了比较,在 Python 2.7 中它确实会产生一个语法错误:
Python 2.7.16 (default, Apr 12 2019, 15:32:52)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a: 'hello world'
File "<stdin>", line 1
a: 'hello world'
^
SyntaxError: invalid syntax
为什么这不会导致 Python 3.7 中的语法错误,它可以用于什么(如果有的话)?
解决方案
最新版本的 Python 支持称为类型提示或类型注释的语法。此语法允许您编写a: int
以声明在当前上下文中变量a
将具有类型int
。
编译器实际上并没有检查这一点,实际上将允许变量名之后的任何表达式,因此您使用的字符串将被接受为有效的类型提示。
有关类型提示的详细说明,请参阅https://www.python.org/dev/peps/pep-0526/。
如果您确实在代码中添加了类型提示,那么您可以使用诸如mypy之类的工具来执行静态类型检查。
推荐阅读
- python - 声明变量的内存与在函数调用中定义时的对比
- java - 是否有必要根据TDD通过测试覆盖POJO?
- c - STM32F7:从自定义引导加载程序跳转到应用程序时出现硬故障
- azure - 将 Visual Studio(MSDN) 订阅移动到特定的管理组
- javascript - 将 json 文件与 POST 详细信息进行比较并返回值
- sql - 我如何找到数据透视列作为日期格式
- docker - IIS Dockerfile:APPCMD 失败,错误代码为 4312
- angular - Angular表单,成功提交表单后如何自动滚动到顶部?
- authentication - 部署在 Azure 上的 Teams 中的机器人身份验证
- visual-studio-code - 将内联注释与 VSCode 中的某一列对齐