我今天也有类似的问题,并与一个叫IterInt类,可以让你使用“+”和递增或递减的地方来到了“ - ”装饰。
用法:
x = IterInt()
print x
# result: 0
print +x
# result: 1
print +x
# result: 2
print +x
# result: 3
print -x
# result: 2
print -x
# result: 1
print -x
# result: 0
在我来说,我有,我想通过一个特定的索引后插入几个命令项修改应用程序的现有菜单的情况。我提供的API提供了一个“addCommand”函数,它可以获取要插入的索引。
考虑其中菜单有命令a到g,像菜单= [A,F,G]此伪代码,我要插入位于索引1-4
idx = 1
menu.addCommand(b, index=idx)
idx += 1
menu.addCommand(c, index=idx)
idx += 1
menu.addCommand(d, index=idx)
idx += 1
menu.addCommand(e, index=idx)
idx += 1
# result: menu = [a, b, c, d, e, f]
这将是很好如果我可以编写它,所以idx会像c一样增加我可以做idx ++的位置,但函数不允许在参数中使用python的idx + = 1方法。
解决方案:
class IterInt(int):
"""
This function will return the next integer from the init_value starting point or 0 if None.
Each subsequent call to increment returns the next value
:param init_value:
:return:
"""
def __init__(self, init_value=None):
if init_value is None:
init_value = 0
if init_value is not None:
self.increment_value = init_value
self.increment_value = init_value
def __pos__(self):
self.increment_value += 1
return self.increment_value
def __neg__(self):
self.increment_value -= 1
return self.increment_value
idx = IterInt(1)
menu.addCommand(b, index=+idx)
menu.addCommand(c, index=+idx)
menu.addCommand(d, index=+idx)
menu.addCommand(e, index=+idx)
# result: menu = [a, b, c, d, e, f]
为什么你想实现一个前缀操作呢?你打算添加一个自定义预处理器来将++ n转换为方法调用吗? – Ryan 2009-07-16 04:11:10
嗯我只想显示我的朋友python可以做--n:打印n;) – 2009-07-16 04:24:04
看到这一个很好,如果稍微复杂的方式来包装你的ints在一个匿名类(这是可变的),它将表现得像一个'reference':http://stackoverflow.com/a/1123054/409638 ie ref = type('',(),{'n':1}) – robert 2014-11-06 11:58:33