【问题标题】:How to move multiple variables from a function into the global scope?如何将多个变量从函数移动到全局范围?
【发布时间】:2019-09-02 09:29:31
【问题描述】:

我是 python 新手,我正在创建一个类似游戏的垄断游戏,并且正在研究程序的设置方面,我有一个函数可以询问用户他们想为我的每个设置输入什么然后使用另一个功能将这些设置导入文本文件,以便将它们存储起来供以后使用,也可以让程序将它们用作设置。这是我的问题出现的地方,我预计会有大约 15 个设置问题,这是我能想到的唯一方法,将它们从函数中取出以用于另一个函数,并将它们导入全局范围,以便它们可以使用通过程序,是使用 return 是否有另一种方法可以做到这一点,或者我只需要为每个变量使用 return

谢谢,

# Settings file, if user chooses to run setup this is all the setup 
questions
def gameSettingsSetup():
   print("Lets setup")
   numPlayers = int(input("How many real players are playing: "))
   numAIplayers = int(input("How many AI players will be playing?: 
   "))
   AILevel = input("What AI difficulty level would you like?: ") 

# Game settings all the main game settings

# sends over the settings into the text file
def gameSettingsSave():

【问题讨论】:

  • 你可以使用全局变量但你不应该
  • 您应该返回一个包含所选配置设置的对象。 gameSettingsSetup 的调用者然后可以决定如何处理它:将其保存为全局变量,将其解压缩为多个全局变量,等等。

标签: python python-3.x function variables


【解决方案1】:

不要在使用global的方法之间共享变量;改为让它们成为对象属性。

class Game:

    def __init__(self):
        self.questions = []
        self.ai_level = 'easy'

全局变量会导致难以推理的方法之间的耦合。 今天你可以看懂代码, 但在它长大几个星期后,它就会变成完全不同的野兽。

另外,请遵循PEP-8 的建议,将snake_case 用于方法和变量名称:

    def game_settings_setup(self):
        print("Let's setup.")
        self.num_players = int(...)
        self.num_ai_players = int(...)
        self.ai_level = ...

帮自己一个忙。 运行$ pip install flake8,然后运行$ flake8 *.py 以获取有关您编写的代码的提示。 按照 flake8 的建议,按照它的建议进行修改。

【讨论】:

    【解决方案2】:

    你可以的

    return numPlayers, numAIplayers, AILevel
    

    但将所有设置存储在字典中可能更容易:

    def gameSettingsSetup():
        print("Lets setup")
        settings = {}
        settings["numPlayers"] = int(input("How many real players are playing: "))
        setting["numAIplayers"] = int(input("How many AI players will be playing?: "))
        settings["AILevel"] = input("What AI difficulty level would you like?: ")
        return settings
    

    然后您可以将settings 字典传递给任何需要它的函数,也可以轻松地将其全部保存到磁盘。

    【讨论】:

      【解决方案3】:
      numPlayers = 0
      def gameSettingsSetup():
          global numPlayers
          numPlayers = ...
      

      通过使用global,您可以将全局变量拉入函数并对其进行修改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        相关资源
        最近更新 更多