通过在Python 3中调用哈希表值来增加整数?

时间:2014-06-16 19:38:35

标签: python python-3.x

你认为这很容易。

我有以下代码:

key_handlers=collections.defaultdict(lambda: None)
key_handlers['+']=operator.iadd(tickrate,1)
key_handlers['-']=operator.iadd(tickrate,-1)

Tickrate当然是全球性的。后来,我有类似的东西(我现在已经丢失了原始代码,用elif链替换了它):

if event.type == KEYDOWN:
    key_handlers[event.unicode]()

...这不起作用,因为iadd只对in-place-add-s为可变类型,而int是不可变的。你不能在lambdas中分配东西,我宁愿没有一个函数来添加一个数字。如何在不牺牲Pythonic-ness的情况下解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以使用您选择的默认值暂存defaultdict。例如:

from collections import defaultdict
key_handlers = defaultdict(lambda : tickrate)

但是,从上面的例子中,我认为你真正想要的是一个更新全局状态的dict方法。这是从上面@utdemir的评论中扩展出来的:

global tickrate
key_kandlers = {'+': lambda : 1, '-': lambda : -1}
func = key_handlers.get(event.type, None)
if func is not None:
    tickrate += func()

上面的示例限制您只是操纵tickrate状态,因此您可能需要更强大的功能。但是上面使用event.type来获取函数的一般形式非常有用。