这是一个简单的问题,所以我很惊讶在SO上找不到它(如果我错过了,敬请谅解),每当我考虑通过重构用NamedTuple替换元组时,它总是浮现在我的脑海中。
我能像使用元组一样将typing.NamedTuple
拆包为参数或解构赋值吗?
这是一个简单的问题,所以我很惊讶在SO上找不到它(如果我错过了,敬请谅解),每当我考虑通过重构用NamedTuple替换元组时,它总是浮现在我的脑海中。
我能像使用元组一样将typing.NamedTuple
拆包为参数或解构赋值吗?
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'
解包顺序是定义中字段的顺序。
{ a, b } = t
,在这种情况下,代码不会因为顺序错乱而出错。 - Ben JonesNamedTuple
本质上仍然是一个_tuple_,即有序的,所以只有在顺序有意义的情况下才有“意义”使用。但在现实世界中,它完全可以作为一个轻量级的不可变结构,而不需要对条目的顺序有意义,所以能够忘记顺序的存在会很好。 - undefined