python for循环递减_Python中递增和递减运算符的行为

是的,我也错过了++和 - 功能。 几百万行的c代码在我的老头脑中刻上了那种想法,而不是对抗它......这是我练习的一个类:

pre- and post-increment, pre- and post-decrement, addition,

subtraction, multiplication, division, results assignable

as integer, printable, settable.

这是'tis:

class counter(object):

def __init__(self,v=0):

self.set(v)

def preinc(self):

self.v += 1

return self.v

def predec(self):

self.v -= 1

return self.v

def postinc(self):

self.v += 1

return self.v - 1

def postdec(self):

self.v -= 1

return self.v + 1

def __add__(self,addend):

return self.v + addend

def __sub__(self,subtrahend):

return self.v - subtrahend

def __mul__(self,multiplier):

return self.v * multiplier

def __div__(self,divisor):

return self.v / divisor

def __getitem__(self):

return self.v

def __str__(self):

return str(self.v)

def set(self,v):

if type(v) != int:

v = 0

self.v = v

您可以像这样使用它:

c = counter() # defaults to zero

for listItem in myList: # imaginary task

doSomething(c.postinc(),listItem) # passes c, but becomes c+1

......已经有了c,你可以这样做......

c.set(11)

while c.predec() > 0:

print c

....要不就...

d = counter(11)

while d.predec() > 0:

print d

...并且(重新)分配到整数...

c = counter(100)

d = c + 223 # assignment as integer

c = c + 223 # re-assignment as integer

print type(c),c # 323

...虽然这将维持c作为类型计数器:

c = counter(100)

c.set(c + 223)

print type(c),c # 323

编辑:

然后有一些意想不到的(并且完全不需要的)行为,

c = counter(42)

s = '%s: %d' % ('Expecting 42',c) # but getting non-numeric exception

print s

...因为在该元组内部,getitem()不是使用的,而是将对象的引用传递给格式化函数。 叹。 所以:

c = counter(42)

s = '%s: %d' % ('Expecting 42',c.v) # and getting 42.

print s

...或者,更详细,更明确地说明了我们实际想要发生的事情,尽管在实际形式中以冗长的方式反映(使用c.v)...

c = counter(42)

s = '%s: %d' % ('Expecting 42',c.__getitem__()) # and getting 42.

print s