一个namedtuple是一个灵活容器的方式吗?

时间:2014-04-17 15:48:40

标签: python tuples namedtuple

我对Python很陌生,我不知道有什么可用。目前,我有这段代码可以快速将一些命名变量放在一起,所以我可以在其他地方使用它们:

def myfunction():
    props = namedtuple('props', '')

    props.color = "green"
    props.size = "large"
    props.wheels = 4
    props.roof = True

    return props

在这种情况下,namedtuple是一个很好的解决方案吗?或者它可以更简单吗?

2 个答案:

答案 0 :(得分:3)

namedtuple优秀的工具,用于生成固定大小的(不可变的)信息,就像元组一样,但为方便起见,使用命名属性。

但是,您正在错误地使用namedtuple类工厂。 props,您通常会像这样使用它:

Props = namedtuple('Props', 'color size wheels roof')

def myfunction():
    props = Props(color="green", size="large", wheels=4, roof=True)
    return props

这使得props不可变(最终用户可以使用namedtuple._replace() method生成新实例),也可以使用索引。

您遇到问题的唯一原因是每次运行函数时都会创建一个新的类对象;您在其上设置的类属性不会在实例之间共享,因为没有创建任何实例。

如果您不想要不可变对象,请改用字典:

def myfunction():
    return {
        "color": "green",
        "size": "large",
        "wheels": 4,
        "roof": True
    }

答案 1 :(得分:1)

如果您只是使用props来存储数据,最简单的选择就是使用dict

def myfunction():
    return {"color": "green",
            "size": "large",
            "wheels": 4,
            "roof": True}

dict的元素随后被视为props["color"]等等(当然,一旦将返回值存储在名为“props”的变量中)。