当前位置: 首页 > 知识库问答 >
问题:

表示指定类型集合的类型

骆磊
2023-03-14

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

int列表的伪python代码示例:

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

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

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

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

共有3个答案

曾修真
2023-03-14

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

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

各种工具可能比Python 3.9更早支持这种语法。在运行时未检查注释时,使用引用或__future__语法是有效的。

# quoted
def my_func(l: 'list[int]'):
    pass
# postponed evaluation of annotation
from __future__ import annotations

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

何楷
2023-03-14

现在Python 3.5正式发布了,有了类型提示支持模块-键入,以及相关的列表通用容器的“类型”。

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

from typing import List

def my_func(l: List[int]):
    pass
洪凯定
2023-03-14

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

更新2

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

更新1

截至2015年5月,PEP0484(类型提示)已被正式接受。该实施草案也可在github上的ambv/打字系统下查阅。

原始答案

截至2014年8月,我已经确认不可能使用Python 3类型注释来指定集合中的类型(例如:html" target="_blank">字符串列表)。

使用格式化的docstring(如StructuredText或Sphinx)是可行的替代方案,并受到各种IDE的支持。

看起来,吉多正在考虑本着mypy的精神扩展类型注释的想法:http://mail.python.org/pipermail/python-ideas/2014-August/028618.html

 类似资料:
  • Swift 提供了三种主要的集合类型,所谓的数组、合集还有字典,用来储存值的集合。数组是有序的值的集合。合集是唯一值的无序集合。字典是无序的键值对集合。 Swift 中的数组、合集和字典总是明确能储存的值的类型以及它们能储存的键。就是说你不会意外地插入一个错误类型的值到集合中去。它同样意味着你可以从集合当中取回确定类型的值。 注意 Swift 的数组、合集和字典是以泛型集合实现的。要了解更多关于泛

  • 本页包含内容: 数组(Arrays) 集合(Sets) 字典(Dictionaries) 集合的可变性(Mutability of Collections) Swift 语言提供经典的数组和字典两种集合类型来存储集合数据。数组用来按顺序存储相同类型的数据。字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对)。 Swift 语言里的数组和字典中存储的数据值类型必须明确。 这意

  • 问题内容: 如果我有一个通用类: 我想实例化几个项目,例如… …并将它们添加到集合中。如何定义集合,使其可以容纳泛型类型列表?然后,我想在某个时刻迭代集合,并使用Value属性。可能? 问题答案: 让您的泛型类从非泛型基类继承,或实现一个非泛型接口。然后,您可以拥有此类型的集合,并将其转换为用于访问集合内容的任何代码。 这是一个例子。

  • 我已经实现了一个自定义队列对象,我想用它在控制器中存储以前的项目。我希望将此类型用作控制器中的私有变量,并仅将其作为符合的对象对外公开,以便客户端可以在不知道任何特定于类的详细信息(例如函数)的情况下迭代或索引该对象。 Swift协议不能是通用的,所以不幸的是,我不能简单地定义一个getter来返回一个

  • 问题内容: 在解决了之前的问题的基础上,但又导致了另一个问题。如果协议/类类型存储在集合中,则取回并实例化它们会引发错误。下面是一个假设的例子。该范例基于“程序到接口而不是实现”,“程序到接口” 编辑 -我当前的解决方法是遍历集合,但是由于api必须知道各种实现,所以这当然是有限的。另一个限制是这些类型的子类(例如PersianCat,GermanShepherd)将不会调用其重写的函数,否则我将