使用Python 3的函数注释,可以指定包含在同质列表(或其他集合)中的项的类型,以便在PyCharm和其他ide中进行类型提示。
int列表的伪python代码示例:
def my_func(l:list<int>):
pass
我知道使用Docstring是可能的…
def my_func(l):
"""
:type l: list[int]
"""
pass
... 但如果可能的话,我更喜欢注释风格。
使用Python 3的函数注释,可以指定包含在同质列表(或其他集合)中的项的类型,以便在PyCharm和其他ide中进行类型提示。
int列表的伪python代码示例:
def my_func(l:list<int>):
pass
我知道使用Docstring是可能的…
def my_func(l):
"""
:type l: list[int]
"""
pass
... 但如果可能的话,我更喜欢注释风格。
当前回答
更新:请查看其他答案,这个已经过时了。
原答案(2015):
现在Python 3.5正式发布了,有类型提示支持模块-类型和通用容器的相关List“类型”。
换句话说,现在你可以做:
from typing import List
def my_func(l: List[int]):
pass
其他回答
回答我自己的问题;TLDR的答案是否定的。
更新2
2015年9月,Python 3.5发布了对类型提示的支持,并包含了一个新的类型模块。这允许指定集合中包含的类型。截至2015年11月,JetBrains PyCharm 5.0完全支持Python 3.5,包括如下所示的类型提示。
更新1
截止2015年5月,PEP0484 (Type Hints)已被正式接受。实现草案也可以在github的ambv/typehinting下找到。
原来的答案
截至2014年8月,我已经确认不可能使用Python 3类型注释来指定集合中的类型(例如:字符串列表)。
使用格式化的文档字符串(如reStructuredText或Sphinx)是可行的替代方案,并得到各种ide的支持。
Guido似乎也在考虑以mypy: http://mail.python.org/pipermail/python-ideas/2014-August/028618.html的精神扩展类型注释的想法
有了BDFL的支持,现在几乎可以肯定的是,python(可能是3.5)将通过函数注释为类型提示提供标准化语法。
https://www.python.org/dev/peps/pep-0484/
正如PEP中所引用的,有一个实验性的类型检查器(有点像pylint,但用于类型)称为myypy,它已经使用了这个标准,并且不需要任何新的语法。
http://mypy-lang.org/
从Python 3.9开始,内建类型相对于类型注释来说是泛型的(参见PEP 585)。这允许直接指定元素的类型:
def my_func(l: list[int]):
pass
这也扩展到标准库的大多数其他容器类型,例如collections.deque或collections.abc.Mapping。
在Python 3.9之前,各种工具都可能支持此语法。当注释在运行时没有被检查时,使用引号或__future__.annotations语法是有效的。
# quoted
def my_func(l: 'list[int]'):
pass
# postponed evaluation of annotation
from __future__ import annotations
def my_func(l: list[int]):
pass
作为PEP 585的结果,在与标准库类型相对应的类型方面的大多数帮助程序都已弃用,例如类型。列表,输入。Deque或typing.Mapping。只有在需要与3.9之前的Python版本兼容时才应该使用它们。
类型注释从PEP 484开始添加
from . import Monitor
from typing import List, Set, Tuple, Dict
active_monitors = [] # type: List[Monitor]
# or
active_monitors: List[Monitor] = []
# bonus
active_monitors: Set[Monitor] = set()
monitor_pair: Tuple[Monitor, Monitor] = (Monitor(), Monitor())
monitor_dict: Dict[str, Monitor] = {'codename': Monitor()}
# nested
monitor_pair_list: List[Dict[str, Monitor]] = [{'codename': Monitor()}]
这目前在Python 3.6.4的PyCharm上为我工作
更新:请查看其他答案,这个已经过时了。
原答案(2015):
现在Python 3.5正式发布了,有类型提示支持模块-类型和通用容器的相关List“类型”。
换句话说,现在你可以做:
from typing import List
def my_func(l: List[int]):
pass