Namedtuples在Python中用于命名小型数据集合。
以这个名称为例:
import collections
sesameEpisodeNTC = collections.namedtuple('sesameEpisodeNTC',
'lead_character', 'has_elmo')
se0 = sesameEpisodeNTC(lead_character='bigbird', has_elmo=False)
可以将类定义('sesameEpisodeNTC ='...)作为另一个类的属性吗?我更喜欢在类中保留一些命名元组,以避免混淆模块命名空间。但这会导致酸洗(cPickle,dill)问题,这是一个显而易见的问题。
同样,我注意到了namedtuple类定义的第一个参数,typename(即'sesameEpisodeNTC')必须是类的名称,否则pickle不起作用。 (同时使用2.7和3.4)复制并不理想。是否有其他类型参数的最佳实践,它是否会影响酸洗代码旁边的代码?
是否还有其他未被广泛记录的角落案例,我在命名元组中缺少?令人讨厌的是,一些python最有用的数据结构有尖锐的角落,可以阻碍stdlib的某些部分。
答案 0 :(得分:1)
如果在模块级别进行namedtuple
定义,dill
可以使用namedtuple
类对象作为属性来挑选类。当然,这并不能帮助你减少混乱。我认为答案是肯定的。目前,您无法在类中定义namedtuple
并默认情况下进行腌制。
>>> import collections
>>> nt = collections.namedtuple('nt',['one','two'])
>>> nt
<class '__main__.nt'>
>>>
>>> import dill
>>>
>>> dill.copy(nt)
<class '__main__.nt'>
>>>
>>> class Foo(object):
... cnt = nt
...
>>> f = Foo()
>>> f.cnt
<class '__main__.nt'>
>>> f.cnt(1,2)
nt(one=1, two=2)
>>>
>>> dill.copy(f)
<__main__.Foo object at 0x10f1b5850>
>>> dill.copy(Foo)
<class '__main__.Foo'>
>>>
dill
github上有一张票/题可以做得更好,但现在没有 - 你必须和模块级namedtuples
一起生活 - 是的,它们需要与namedtuple
的第一个参数同名。