8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

对指定类型的集合进行类型提示

mono 1月前

27 0

使用 Python 3 的函数注释,可以指定同类列表(或其他集合)中包含的项目的类型,以便在 PyCharm 和其他 IDE 中进行类型提示...

使用 Python 3 的函数注释,是否可以指定同类列表(或其他集合)中包含的项目的类型,以便在 PyCharm 和其他 IDE 中进行类型提示?

int 列表的伪 Python 代码示例:

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

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

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

...但如果可能的话,我更喜欢注释样式。

帖子版权声明 1、本帖标题:对指定类型的集合进行类型提示
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由mono在本站《class》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 截至 2015 年 5 月, PEP 484(类型提示) 已正式被接受。草稿实现也可在 github 的 ambv/typehinting 下 .

    2015 年 9 月,Python 3.5 发布,支持类型提示并包含一个 new typing module 。这允许指定集合中包含的类型。截至 2015 年 11 月,JetBrains PyCharm 5.0 完全支持 Python 3.5 以包含类型提示,如下所示。

    PyCharm 5.0 Code Completion using Type Hints

    from typing import List
    
    def do_something(l: List[str]):
        for s in l:
            s  # str
    

    原始答案

    截至 2014 年 8 月,我已确认无法使用 Python 3 类型注释来指定集合内的类型(例如:字符串列表)。

    使用格式化的文档字符串(例如 reStructuredText 或 Sphinx)是可行的替代方案,并且受到各种 IDE 的支持。

    Guido 似乎也在考虑以 mypy 的精神扩展类型注释: http://mail.python.org/pipermail/python-ideas/2014-August/028618.html

  • 更新:似乎包含对泛型支持的类型提示已进入 PEP484 python.org/dev/peps/pep-0484

  • AHF 1月前 0 只看Ta
    引用 4

    FWIW(因为我不喜欢眯着眼睛看图片中的模糊文字):该图片的关键点是 l: List[str]。赞成 alecxe 的回答,因为它以纯文本形式显示。

  • 从下面的答案来看,从 Python3.9 开始,使用 list 代替 List 更受欢迎

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

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

    这也扩展到标准库的大多数其他容器类型,例如 collections.deque collections.abc.Mapping .


    语法有效 的 __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, typing 对应于标准库类型的大多数辅助函数已被弃用,例如 typing.List , typing.Deque typing.Mapping 。仅当需要与 3.9 之前的 Python 版本兼容时才应使用它们。

  • 自 Python 3.5 正式发布以来,就出现了支持类型提示的模块 - typing 通用容器的 相关 列表

    换句话说,现在你可以这样做:

    from typing import List
    
    def my_func(l: List[int]):
        pass
    

    自 Python 3.9 起,此功能已弃用,现在你可以直接使用内置函数 list 代替 typing.List .

  • 在 Python 3.9 中已被取代。请参阅 .com/questions/24853923/…

  • 以来,已添加类型注释 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()}]
    

    这目前在 PyCharm 和 Python 3.6.4 上对我有用

    Example Picture in Pycharm

  • 在 BDFL 的支持下,现在几乎可以肯定,python(可能是 3.5)将通过函数注释为类型提示提供标准化语法。

    https://www.python.org/dev/peps/pep-0484/

    正如 PEP 中所引用的,有一个名为 mypy 的实验性类型检查器(有点像 pylint,但用于类型),它已经使用了此标准,并且不需要任何新的语法。

    http://mypy-lang.org/

返回
作者最近主题: