微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python中键入带有嵌套元组的元组列表

如何解决在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 举报,一经查实,本站将立刻删除。