首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向可变长度元组添加类型注释?

如何向可变长度元组添加类型注释?
EN

Stack Overflow用户
提问于 2019-06-22 22:43:45
回答 1查看 1.2K关注 0票数 0

我正在尝试(作为练习)输入Curio的源代码,但是我在代码的生成部分中偶然发现了它的可变长度元组的问题。

Curio的陷阱向内核生成一个已知长度的元组,但这些陷阱产生的元组长度不同。

例如,curio.traps._read_wait(fileobj)生成类型为Tuple[int, int, int, str]的4元组,而curio.traps._spawn(coro)生成类型为Tuple[int, Coroutine]的2元组。

它们的所有产量类型之间的相似之处在于,第一个项目总是一个int,而其余的项目具有Any类型。

在内核中,当它将协同线运行到下一个屈服点时,它期望int作为第一项,而Any则在此之后。我原以为Tuple[int, Any, ...]会做一些工作,但是它给出了一个错误,说明...是意外的。

代码语言:javascript
复制
from typing import Tuple, Any

# Test code
vltuple: Tuple[int, Any, ...] = (1, 2)
vltuple = (1, 2, 3)
vltuple = (1, 'a', 'b')
vltuple = (1, [], 4.5)

以下是准确的错误消息:

____.py:4:错误:意外‘.’ ____.py:4:错误:赋值中不兼容的类型(表达式有"Tupleint“类型,变量有类型"Tupleint,Any,Any")

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-23 03:06:59

正如我所说:

根据这个答案,只能对任意长度的齐次元组进行注释,正如您在PEP484中看到的那样,您无法找到对任意长度的任何其他引用。这应该是一些黑客,但我建议你把它分成两个变量。

解决方案:

代码语言:javascript
复制
key: int
args: list

key, *args = (1, 2)
key, *args = (1, 2, 3)
key, *args = (1, 'a', 'b')
key, *args = (1, [], 4.5)

通过使用扩展解压缩,您可以键入并分配一个固定数量的变量(在本例中为一个,只需键),并将额外的元素放入另一个可以单独键入的变量中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56719707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档