2024-10-02 04:26:48 发布
网友
在我的在线课堂上,我的一位python导师告诉我,namedtuple弊大于利。在
namedtuple
我不明白为什么。请指定何时使用namedtuple和何时不使用?在
namedtuple的典型例子如下。。。在
>>> Point = namedtuple('Point', ['x', 'y']) >>> p = Point(x=1, y=2) >>> p.x 1 p.y 2
我认为大多数人一开始觉得很有吸引力的是,它可以很容易地创建一个类,并且能够用关键字args Point(x=1, y=2)实例化,并且能够像p.x和p.y进行点式访问。在
Point(x=1, y=2)
p.x
p.y
然而,有很多事情很容易被忽视,而且相当死板。子类也可能发生意外情况。除非namedtuple真正符合您的用例,否则如果您只想要点式名称查找和一个好的repr,那么最好使用SimpleNamespace。在
SimpleNamespace
我能看到的问题是
不能为namedtuple指定默认参数值同学们。这个当您的数据可能有许多可选属性时,它们会变得笨拙。在
namedtuple实例的属性值仍然可以使用数值索引和迭代访问,特别是在外部化API中,这可能会导致无意的使用,从而使迁移到真正的类更加困难待会儿。如果你不能控制namedtuple实例的所有用法,最好定义你自己的类
至于何时使用,请参阅IMCoins的评论
namedtuple的典型例子如下。。。在
我认为大多数人一开始觉得很有吸引力的是,它可以很容易地创建一个类,并且能够用关键字args
Point(x=1, y=2)
实例化,并且能够像p.x
和p.y
进行点式访问。在然而,有很多事情很容易被忽视,而且相当死板。子类也可能发生意外情况。除非namedtuple真正符合您的用例,否则如果您只想要点式名称查找和一个好的repr,那么最好使用
^{pr2}$SimpleNamespace
。在我能看到的问题是
不能为namedtuple指定默认参数值同学们。这个当您的数据可能有许多可选属性时,它们会变得笨拙。在
namedtuple实例的属性值仍然可以使用数值索引和迭代访问,特别是在外部化API中,这可能会导致无意的使用,从而使迁移到真正的类更加困难待会儿。如果你不能控制namedtuple实例的所有用法,最好定义你自己的类
至于何时使用,请参阅IMCoins的评论
相关问题 更多 >
编程相关推荐