命名元组和投影

我发现该名称tuple非常方便,用于快速原型制定代码
必须返回许多结果的功能,这些结果可能会成长为
代码演变.它们比dict更优雅,我没有
创建一个新的显式类.不幸的是,在这种情况下
失去元组拆箱的便利:更改元组的参数
会破坏其他功能,打开结果.
一个带有3.0语法的解决方案将仅解开所用的
参数,使用始终 *休息
a,b, *rest = f()
因此,如果元组生长,代码会继续工作.
但是,我发现这令人困惑(在Python 2.5中不可避免).
我不知道是否提出了类似的解决方案,我想到了
这个:
添加一个给出一系列参数的方法"项目"(在类似
时尚作为命名构造)仅返回元组
项目.我将命名的食谱作为概念证明,
用这些行替换"返回结果":
def _project(self,fields):
返回元组(getAttr(self,field)for fields.split())
def _getItem(self,item):
如果Isinstance(项目,str):
返回self.project(项目)
返回超级(结果,self).__ getItem __(项目)
result.project = _project
结果.__ getItem__ = _getItem
返回结果
这就是结果:
在[2]:x = nesstuple('x','a b c d')中
在[3]中:x = x(1,2,3,4)
在[4]中:a,c = x.project('a c')
在[5]:a,c
OUT [5]:(1,3)
在[6]中:a,d = x ['a d']
在[7]:A,D
OUT [7]:(1,4)
在[8]:x [2]
出去[8]:3
我还实施了__getItem__只是为了显示另一种可能的语法
(也许有点丑).项目可能不是一个不言而喻的名字,可能
诸如"选择"(对于SQL上瘾者)之类的东西更合适.
其他可能的解决方案?
谢谢,
Giuseppe

标签: python

添加新评论