对于像list这样的类型我可以很容易地创建一个空列表来使这个构造工作:
s = []
s+= [1,2,3] # result s assigned [1,2,3]
在这样的结构中显然很有用:
s=[]
for v in (list1,list2,list3..):
if condition : s+=v
现在我正在使用用户定义的类型,在我无法阅读或更改的模块中定义 ..我必须这样做:
s=0
for v in (typefoo1,typefoo2,..):
if condition :
if s==0 :
s=v
else:
s+=v
这很有效,但很难看,而且经常发生这很烦人。
所以..有没有办法创建一个空对象,这样+=
运算符的行为就像常规赋值=
一样,无论r.h.s上的类型如何?
编辑: 我试图故意保留问题的通用性,但为了完整性,所讨论的类型是Abaqus几何序列。
答案 0 :(得分:2)
有没有办法创建一个空对象,这样
+=
运算符的行为就像常规赋值=
一样,无论r.h.s上的类型如何?
不确定。只需编写一个类并定义您的__add__
方法即可返回未经修改的RHS。
class DummyItem:
def __add__(self, other):
return other
s = DummyItem()
s += 23
print s
结果:
23
答案 1 :(得分:1)
假设你的列表至少有一个元素,你可以创建一个迭代器并使用Polygon
来获取第一个元素,然后将其余元素相加:
Coordinates
您也可以使用sum
函数执行此操作,第二个参数指定初始值:next
。这显式不适用于字符串,但您也可以以类似的方式使用i = iter(lst)
s = next(i)
for x in i:
s += x
,将使用字符串:s = sum(i, next(i))
。或者,您甚至可以将其与@Kevin's answer中的reduce
组合为s = reduce(operator.add, i, next(i))
。这样它也适用于字符串,您可以直接使用列表,而不需要创建迭代器。