首页 > 解决方案 > 这段代码中的冒号 (:) 有什么作用?

问题描述

我在分配变量时不小心使用:了而不是=,我很惊讶它没有产生错误。例如,以下运行没有投诉:

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-3.x

解决方案


最新版本的 Python 支持称为类型提示或类型注释的语法。此语法允许您编写a: int以声明在当前上下文中变量a将具有类型int

编译器实际上并没有检查这一点,实际上将允许变量名之后的任何表达式,因此您使用的字符串将被接受为有效的类型提示。

有关类型提示的详细说明,请参阅https://www.python.org/dev/peps/pep-0526/

如果您确实在代码中添加了类型提示,那么您可以使用诸如mypy之类的工具来执行静态类型检查。


推荐阅读