Python词典和选择案例

时间:2014-07-31 01:23:48

标签: python dictionary

在尝试使用字典在python中实现类似场景的切换案例时,我遇到了一个问题。

pos=(0,0)
move={'up':(pos[0],pos[1]+1),'dn':(pos[0],pos[1]-1)}
newpos=move['up']
pos=newpos

这与预期一样有效。但是,当我做这样的事情时。

pos=(0,0)
move={'up':(pos[0],pos[1]+1),'dn':(pos[0],pos[1]-1)}
moves_list=['up','up','dn','dn']#or anything else for that matter
for mo in moves_list:
    pos=move[mo]
print pos

这段代码应该给我最终位置为(0,0) 但是我得到(0,-1)

我理解这是因为移动[' up']和移动[' down']的值是根据字典的定义计算的。 如果是这种情况,每当我需要定义用于查找下一个位置的计算密集型算法时,我将浪费时间来计算可能永远不会使用的移动。 例如。如果move_list只是[' up,' up']那么' dn'不需要计算。

我的问题

在实际调用这些值之前,有什么方法可以阻止这些值的计算吗?

在python中使用switch-case有更优雅的方法吗?

1 个答案:

答案 0 :(得分:3)

您通常会为各种“切换案例”构建匿名函数。

使用lambda创建匿名函数,并遵循语法lambda args: return_value

因此,例如,此函数将数字作为输入并返回该数字加1:

add_one = lambda x: x + 1

这样的事情会起作用:

moves = {
        'up': lambda (x,y): (x, y+1),
        'dn': lambda (x,y): (x, y-1),
    }

然后您可以使用:

进行移动
pos = moves[move](pos)

请注意,将明确的参数放入lambda函数通常是个更好的主意。这样可以获得更清晰,更可重用的代码。