通过字典调用其他函数的函数有问题:有人可以向我解释这段代码吗?

时间:2014-05-13 01:55:21

标签: python iterator next

这在基于文本的游戏中用于确定是否已输入不同的房间以运行功能。这是学习练习,所以我确信代码不是最佳的。通过在最后一行运行代码来启动整个过程。

def runner(map, start):
    next = start

    while True:
        room = map[next]
        print "\n--------"
        next = room()

runner(ROOMS, 'central_corridor')

这是在转轮功能中用作参数的ROOMS字典:

ROOMS = {
  'death': death,
  'central_corridor': central_corridor,
  'laser_weapon_armory': laser_weapon_armory,
  'the_bridge': the_bridge,
  'escape_pod': escape_pod
}

所以,更具体地说,我的问题是,如果在游戏中输入了下一个房间,这个while循环如何用于运行下一个房间的功能?我觉得答案在于while循环中包含的下一个迭代器。

1 个答案:

答案 0 :(得分:1)

如果我们重命名变量,代码会更容易理解。永远不要将变量命名为mapnext,因为这样做会影响同名的内置函数。

以下是重命名mapnext后的相同代码:

ROOMS = {
  'death': death,
  'central_corridor': central_corridor,
  'laser_weapon_armory': laser_weapon_armory,
  'the_bridge': the_bridge,
  'escape_pod': escape_pod
}


def runner(visit, start):
    room = start

    while True:
        action = visit[room]
        print "\n--------"
        room = action()

runner(ROOMS, 'central_corridor')

visit变量是一个dict,它将房间映射到动作(它们是函数)。动作的返回值是一个房间。 所以

action = visit[room]

查看您访问房间时发生的操作, 和

room = action()

room执行后,将action设置为下一个房间的值。