Python 键入带星号参数的提示

Python 键入带星号参数的提示,python,type-hinting,Python,Type Hinting,假设我们要向一个函数添加类型暗示,该函数使用带星号的参数将一组整数相加: def add_integers(*integers): return sum(integers) 给出整数类型是正确的做法,因为每个单独的参数都是这样的吗 def add_integers(*integers: int): return sum(integers) …或者给出结果变量的类型,它最终是一个整数序列元组 def add_integers(*integers: Sequence[int]):

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

def add_integers(*integers):
   return sum(integers)
给出整数类型是正确的做法,因为每个单独的参数都是这样的吗

def add_integers(*integers: int):
   return sum(integers)
…或者给出结果变量的类型,它最终是一个整数序列元组

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

根据,正确的暗示是第一个

根据,正确的暗示是第一个

如果对额外参数没有类型约束/限制,则任何或元组[Any]都是准确的。如果存在类型约束/限制,那么Tuple[type1,type2,…]将是准确的。我想知道为什么PEP中可接受的类型注释假定所有额外的位置参数都是相同的类型。奇怪。@Venkatesh PrasadRanganath认为这更奇怪,因为这是唯一可以用来暗示的。Any或Tuple[Any]将是一个公平的选择,但它没有帮助,因为您没有任何提示。无法使用Tuple[type1,type2,…],因为您希望能够在提示中传递任意数量的参数,使提示仅在提示中定义的参数数量等于传递的参数数量Any或Tuple[Any]时有效显式通信任何对象都可以按任何顺序传递,而我们不知道额外参数的类型约束是什么。类似地,Tuple[type1,type2,…,typen]可以显式地传递类型约束,例如最多前n个附加必须是int。因此,我认为类型提示有助于更严格地传达关于额外参数的要求,我认为我们可以更好地使用它们来达到这一目的。我同意你关于标准参数的任何观点,我是说带星号的参数。但是,若要约束或显示参数的类型,则位置参数比星号参数更好。星号参数最常用于收集符合提示方法或转发参数的相同类型元素列表在这种情况下,我希望类型推断可用于IDE或检查器,以向您显示预期的类型星号参数最常用于收集相同类型元素列表假设或陈述如果是后者,请提供指向它的指针。如果是前者,其依据是什么?我认为starred参数旨在收集没有类型限制的额外参数;有点像C中的varargs。所以,关于额外参数类型同质性的假设有点违背了这个意图;这是我关心的问题。如果对额外参数没有类型约束/限制,那么Any或Tuple[Any]将是准确的。如果存在类型约束/限制,那么Tuple[type1,type2,…]将是准确的。我想知道为什么PEP中可接受的类型注释假定所有额外的位置参数都是相同的类型。奇怪。@Venkatesh PrasadRanganath认为这更奇怪,因为这是唯一可以用来暗示的。Any或Tuple[Any]将是一个公平的选择,但它没有帮助,因为您没有任何提示。无法使用Tuple[type1,type2,…],因为您希望能够在提示中传递任意数量的参数,使提示仅在提示中定义的参数数量等于传递的参数数量Any或Tuple[Any]时有效显式通信任何对象都可以按任何顺序传递,而我们不知道额外参数的类型约束是什么。类似地,Tuple[type1,type2,…,typen]可以显式地传递类型约束,例如最多前n个附加必须是int。因此,我认为类型提示有助于更严格地传达关于额外参数的要求,我认为我们可以更好地使用它们来达到这一目的。我同意你关于标准参数的任何观点,我是说带星号的参数。但是,若要约束或显示参数的类型,则位置参数比星号参数更好。星号参数最常用于收集符合提示方法或转发参数的相同类型元素列表在这种情况下,我希望类型推断可用于IDE或检查器,以向您显示预期的类型星号参数最常用于收集相同类型元素列表假设或陈述如果是后者,请提供指向它的指针。如果是前者,其依据是什么?我认为starred参数旨在收集没有类型限制的额外参数;有点像C中的varargs。所以,关于额外参数类型同质性的假设有点违背了这个意图;这是我关心的问题。