全局存储变量的替代方法

时间:2015-04-24 09:59:19

标签: python

我现在开始使用Python,在练习36上学习“学习Python困难之路”。我想创建一个好的游戏,并在继续下一个练习之前学习更多技巧。我还没有接近过Classes and Object这个主题,但是我想知道我是否可以做一些比标准首先更复杂的事情来选择你自己的冒险'游戏。

我想在Ganon's Lair'中收集四个不同的钥匙,然后用这四个钥匙在主厅打开一扇门。我已经有相当一部分(不优雅),但我仍然需要弄清楚如何存储键而不会被删除。一种不雅的方式是将它们分配为全局变量,例如我在这里做的。

def grass_room():
global key1
grass_instructions = """As you enter the lair of the grass room, you see
                        a spider hanging on the ceiling, with his
                        big eye focused on you. You could grab your 1.slingshot,
                        or perhaps 2.make a run for the green-coloured key under his
                        tail?"""
    print grass_instructions
    gohma_boss = raw_input("> ")
    if gohma_boss == "1":
        print "You shoot him in the eye, he falls down and dies. You grab the key, and return."
        key1 = True
    main_hall("not_empty")
    else:
        print die("You die.")
    main_hall("not_empty")

任何有关保存'的不同方法的建议除了使它们全局化之外,这个关键功能还有哪些?

2 个答案:

答案 0 :(得分:4)

如果你想在函数之间共享一些变量或变量,有几种方法可以做到: *

  1. 将每个变量的值作为参数传递给每个函数,并将其作为返回元组的一部分从每个函数返回。
  2. 在某些结构中包含所有值,例如dict,您可以按名称查看每个值,因此您只能传递一个值并返回。
  3. 创建对象的values属性,并将函数转换为该对象类型的方法。
  4. 使用一个封闭装置,我很难解释,因为我确定你还没有学会关闭封闭装置。
  5. 使用全局。
  6. Pythonic的方法绝对是#3,但你还没有学过类。在这种情况下,我只是使用#5,因为你已经在做了。

    当你了解课程时,回过头来修改这个剧本来使用课程将是一个很好的练习。

    *事实上,在选项2下,选项3-5对于选项2来说都是语法糖......但不要担心。

答案 1 :(得分:0)

您可以将key数据类型设为列表或字典,并将key列表/字典传递给每个键更改功能。由于列表和dicts是可变的,因此在调用范围和key传递给的任何后续函数中将看到对一个函数中的key list / dict所做的更改。