在变量声明中使用冒号

Jab*_*cky 14 python

我最近被问到这在python中意味着什么:

>>> char : str

我不知道.我以前从未见过.我检查了文档,没有那样的东西.一个人的建议是它是静态类型声明,但文档中也没有任何内容.

有了上述,如果我 >>> type(char)失败了

如果我>>> char : str = 'abc'工作,并且类型(char)的结果是<class: str>.它不能是静态声明,因为我可以>>> char : str = 4和type(char)成为<class: int>.

所以我来这里收集许多SO霸主的智慧.那是什么意思?

Mar*_*ers 13

您正在查看变量的注释.提示移动到__annotations__映射:

>>> char: str
>>> __annotations__
{'char': <class 'str'>}
Run Code Online (Sandbox Code Playgroud)

变量注释用于支持第三方工具,例如类型检查器; Python 3.6中的语法是新的.

请参阅PEP 526 - 变量注释的语法,以及Python 3.6中的新增内容:

与函数注释一样,Python解释器不会将任何特定含义附加到变量注释,只将它们存储在__annotations__类或模块的属性中.

  • @Jaberwocky:3.5添加了类型提示,但您使用的*variable annotation*语法特定于Python 3.6.(不要对函数定义中的注释感到困惑,因为版本3.0以来它们已经成为Python 3的一部分). (3认同)
  • 谢谢!好像是3.5开始的。&gt;.&lt; 我想我错过了这个。https://docs.python.org/3/whatsnew/3.5.html?highlight=hint#whatsnew-pep-484 (2认同)
  • @BinLee:不,这是*注释*。类型提示构建在 Python 的注释模型之上,它无疑是将注释扩展到变量的重要驱动程序,但它不是同一回事。您可以自由地将相同的语法用于其他目的。 (2认同)