如何解决在python中键入带有嵌套元组的元组列表
我正在尝试输入以下提示:
from typing import *
x = [('a',),(('b',('c','d'))]
f( k : list[ tuple[str] | tuple[str,tuple[str]]]):
print(k)
并且我不确定如何为这个列表输入提示。
解决方法
以您的示例为例,递归数据类型的正确注释需要前向引用,如下所示:
Tstr = tuple[str,...] | tuple['Tstr','Tstr']
意味着 Tstr
要么是 str
的可变参数元组,要么是每个坐标上包含 Tstr
的嵌套元组。
示例居民是
('b',) # B1: base case with 1 element -- tuple[str]
('c','d') # B2: base case with 2 elements -- tuple[str,str]
(('b',),('c','d')) # inductive case of tuple[B1,B2]
(('c','d'),('b',)) # inductive case of tuple[B2,B1]
((('b','d')),)) # inductive case of tuple[tuple[B2,B1],B1]
...
等
list[Tstr]
那么是一个完美的类型提示(如果它的目的只是提示),但它不会通过 mypy 的类型检查(参见 this 问题)。
如果您希望任何可用的 Python 类型检查器不报错,您需要采用简化版本,即设置归纳的上限并明确指定允许的变体(例如 Tstr = tuple[str,...] | tuple[tuple[str,...],tuple[str,...]]
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。