对于list之类的类型,我可以很容易地创建一个空列表来使这个构造生效:
s = []
s+= [1,2,3] # result s assigned [1,2,3]
显然在这样的构造中很有用:
^{pr2}$现在我正在处理一个用户定义的类型,它是在一个模块中定义的,我无法读取或更改。。我必须这样做:
s=0
for v in (typefoo1,typefoo2,..):
if condition :
if s==0 :
s=v
else:
s+=v
这很管用,但很难看,而且经常发生,这很烦人。
所以。。有没有一种方法可以创建一个空对象,使得+=
运算符的行为与常规赋值=
相似,而不考虑r.h.s上的类型?在
编辑: 我试图故意保持问题的通用性,但为了完整性,所讨论的类型是Abaqus几何序列。在
当然可以。只需编写一个类并定义您的
__add__
方法以返回未修改的RHS。在结果:
^{pr2}$假设您的列表至少有一个元素,您可以创建一个迭代器并使用
next
来获取第一个元素,然后将其余元素相加:您也可以使用^{} 函数来完成此操作,并使用第二个参数指定初始值:
s = sum(i, next(i))
。这显式地不适用于字符串,但您也可以以类似的方式使用reduce
,这样将处理字符串:s = reduce(operator.add, i, next(i))
。或者,您甚至可以将其与来自@Kevin's answer的DummyItem
结合起来,作为s = sum(lst, DummyItem())
。这样它也可以处理字符串,并且可以直接使用列表,而不需要创建迭代器。在相关问题 更多 >
编程相关推荐