2

我目前正在使用 Learn Python the Hard Way 学习 python,并且非常喜欢它。在其中一个课程示例中,我无法掌握“return”的用法。

我坚持的课程是练习 43:来自 Planet Percal #25的 Gothons 。我了解当游戏首次运行时next_room_name设置为central_corridor,因此central_corridor()play(). 我不明白的是如何self.start重新分配 get 。

例如,deathcentral_corridor(). 在第 49 行返回后,我们又回到了play(self): while True循环中。第一行是next_room_name = self.startAs far as I know, self.startstill equals central_corridor,但显然现在是 equaling death

这是否意味着 afterdeath被返回,并且仍在while循环play()中,对象Game()已被重新初始化,__init__正在返回返回的结果?当我们在技术上仍处于循环中并且尚未退出时,我很困惑如何重新分配next_room_name = self.startunder 。我想我对返回的位置感到困惑。__init__deathplay(self): while Truedeath

4

2 回答 2

3

self.start永远不会重新分配。第 49 行的 return 没有返回到play()方法的开头,它返回到

next_room_name = room()

该行next_room_name = self.start根本不在while循环中,因此在第一次之后永远不会发生。next_room_name只是设置为,death因为这就是central_corridor方法返回的内容。

于 2012-11-07T01:56:37.887 回答
3

因此,让我们逐步完成它,直到while循环:

a_game = Game("central_corridor")
a_game.play()

a_game在这里,我们使用start_value=来实例化central_corridor。到目前为止,一切都很好:) 现在我们运行a_game.play()

def play(self):
    next_room_name = self.start

    while True:
        print "\n--------"
        room = getattr(self, next_room_name)
        next_room_name = room()

正如您正确陈述next_room_name的那样,被分配 value central_corridor,然后while循环开始。

这可能是重要的部分 -while循环只执行该while部分,并且在它下面缩进的所有内容 -不会每次都next_room_name重新分配。相反,我们定义为属性(即),然后运行同名的方法。然后在下一个循环中使用该方法的返回值(比如说),这意味着的结果,它会打印一个随机的俏皮话然后退出。如果名称是另一个房间,它将继续循环。self.startroomnext_room_namecentral_corridordeathroom = deathnext_room_name=death()

于 2012-11-07T02:03:12.823 回答