冒号(:)在此代码中做什么?

时间:2019-09-16 14:55:21

标签: 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'
>>>

但是,这似乎没有任何作用。我尝试查看文档和教程,但只找到compound statementsdict comprehensionssequence slicing,在这种情况下我都看不到这两种方法都适用。

为进行比较,在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中引起语法错误,以及它的用途(如果有的话)?

1 个答案:

答案 0 :(得分:4)

Python的最新版本支持称为类型提示或类型注释的语法。这种语法使您可以编写a: int来声明在当前上下文中变量a的类型为int

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

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

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