我可以拆包/解构typing.NamedTuple吗?

4

这是一个简单的问题,所以我很惊讶在SO上找不到它(如果我错过了,敬请谅解),每当我考虑通过重构用NamedTuple替换元组时,它总是浮现在我的脑海中。

我能像使用元组一样将typing.NamedTuple拆包为参数或解构赋值吗?

1个回答

4
当然可以。
from typing import NamedTuple

class Test(NamedTuple):
    a: int
    b: int

t = Test(1, 2)

# destructuring assignment
a, b = t
# a = 1
# b = 2

def f(a, b):
    return f"{a}{b}"

# unpack
f(*t)
# '12'

解包顺序是定义中字段的顺序。


1
因为在技术上是正确的,所以给你点赞,但这种方法似乎容易出错。我希望Python像JavaScript一样支持对象解构赋值:{ a, b } = t,在这种情况下,代码不会因为顺序错乱而出错。 - Ben Jones
1
@BenJones 我同意。我想NamedTuple本质上仍然是一个_tuple_,即有序的,所以只有在顺序有意义的情况下才有“意义”使用。但在现实世界中,它完全可以作为一个轻量级的不可变结构,而不需要对条目的顺序有意义,所以能够忘记顺序的存在会很好。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接