【问题标题】:Type hints for starred arguments [duplicate]加星标参数的类型提示[重复]
【发布时间】:2020-09-09 22:32:02
【问题描述】:

假设我们想向一个函数添加类型提示,该函数使用带星号的参数将一堆整数相加:

def add_integers(*integers):
   return sum(integers)

给出整数类型是正确的做法吗,因为每个单独的参数都是这样的?

def add_integers(*integers: int):
   return sum(integers)

...或者给出结果变量的类型,它最终是一个整数序列(元组)?

def add_integers(*integers: Sequence[int]):
   return sum(integers)

【问题讨论】:

    标签: python type-hinting


    【解决方案1】:

    根据PEP 484,正确的提示是第一个

    【讨论】:

    • 如果额外参数没有类型约束/限制,那么AnyTuple[Any] 将是准确的。如果有类型约束/限制,那么Tuple[type1, type2, ...] 将是准确的。我想知道为什么 PEP 中的“可接受”类型注释假定所有额外的位置参数都是相同的类型。奇怪。
    • @Venkatesh-PrasadRanganath 认为它更多,因为它是唯一可用于提示的。 Any 或 Tuple[any] 将是公平的,但它没有帮助,因为你没有暗示任何东西。 Tuple[type1, type2, ...] 不能使用,因为您希望能够传递任意数量的参数,使提示仅在提示中定义的参数数量等于传递的参数数量时才有效
    • AnyTuple[Any] 明确传达“任何对象都可以按任何顺序传递”(与我们不知道额外参数的类型约束相反)。同样,Tuple[type1, type2, ..., typen] 可以显式地传达类型约束,例如“最多前 n 个额外必须是整数”。所以,我认为类型提示可以帮助更严格地传达需求(关于额外参数),我认为我们可以更好地使用它们来达到这个目的。
    • 我同意Any 的标准参数,我说的是星号参数。但是,如果您想限制或显示参数的类型,则位置参数将是比星号参数更好的选择。加星号的参数最常用于收集相同类型元素的列表(适合提示方法)或前向参数(在这种情况下,我希望类型推断可以用于您的 IDE 或检查器,以向您显示预期的类型)跨度>
    • “加星标的参数最常用于收集相同类型元素的列表”是假设还是陈述?如果是后者,请提供指点。如果是前者,其依据是什么?我认为带星号的参数旨在收集没有类型限制的额外参数;有点像 C 中的可变参数。因此,关于额外参数类型同质性的假设有点打破了这个意图;这是我的担心。
    猜你喜欢
    • 2016-01-27
    • 2017-01-03
    • 1970-01-01
    • 2019-12-09
    • 2017-04-29
    • 1970-01-01
    • 2017-02-24
    相关资源
    最近更新 更多