python-3.x 类型提示指定类型的集合

kokeuurv  于 2023-01-14  发布在  Python
关注(0)|答案(5)|浏览(155)

使用Python 3的函数注解,为了在PyCharm和其他IDE中进行类型提示,可以指定包含在同构列表(或其他集合)中的项的类型。
一个int列表的伪python代码示例:

def my_func(l:list<int>):
    pass

我知道使用Docstring是可能的...

def my_func(l):
    """
    :type l: list[int]
    """
    pass

...但如果可能,我更喜欢注解样式。

enxuqcxy

enxuqcxy1#

回答我自己的问题;TLDR的答案是"否""是"

    • 更新2**

2015年9月,Python 3.5发布了对Type Hints的支持,并且包含了一个new typing module。这允许了集合中包含的类型的规范。截至2015年11月,JetBrains PyCharm 5.0完全支持Python 3.5包含Type Hints,如下图所示。

    • 更新1**

截至2015年5月,PEP0484 (Type Hints)已被正式接受,其草案也可在github under ambv/typehinting上找到。

    • 原始答案**

截至2014年8月,我已经确认不可能使用Python 3类型注解来指定集合中的类型(例如:串的列表)。
使用格式化的文档字符串(如reStructuredText或Sphinx)是可行的替代方法,并受到各种IDE的支持。
Guido似乎也在考虑按照mypy的精神扩展类型注解:http://mail.python.org/pipermail/python-ideas/2014-August/028618.html

ev7lccsx

ev7lccsx2#

更新:请看其他答案,这一个已经过时了。

原答复(2015年):

现在Python 3.5已经正式发布,有了Type Hints支持模块-typing和泛型容器的相关List“type”。
换句话说,现在您可以执行以下操作:

from typing import List

def my_func(l: List[int]):
    pass
qeeaahzv

qeeaahzv3#

从Python 3.9开始,内置类型对于类型注解是通用的(参见PEP 585),这允许直接指定元素的类型:

def my_func(l: list[int]):
    pass

这也扩展到标准库的大多数其他容器类型,例如collections.dequecollections.abc.Mapping
早于Python 3.9的各种工具都支持这种语法。当在运行时没有检查注解时,使用引号或__future__.annotations语法是有效的。
x一个一个一个一个x一个一个二个x
作为PEP 585的结果,typing中对应于标准库类型的大多数帮助器都被弃用了,例如typing.Listtyping.Dequetyping.Mapping。只有在需要与Python 3.9之前的版本兼容时才应该使用它们。

t9aqgxwy

t9aqgxwy4#

自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时使用的

fhity93d

fhity93d5#

有了BDFL的支持,现在几乎可以肯定python(可能是3.5)将通过函数注解为类型提示提供标准化语法。
https://www.python.org/dev/peps/pep-0484/
正如PEP中所提到的,有一个实验性的类型检查器(有点像pylint,但用于类型),名为mypy,它已经使用了这个标准,并且不需要任何新语法。
http://mypy-lang.org/

相关问题