Как переместить несколько переменных из функции в глобальную область?

#python #python-3.x #function #variables

#python #python-3.x #функция #переменные

Вопрос:

Я новичок в 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():
  

Комментарии:

1. Вы можете использовать глобальные переменные, но не должны

2. Вы должны вернуть объект, содержащий выбранные параметры конфигурации. Затем вызывающий объект gameSettingsSetup может решить, что с ним делать: сохранить его как глобальную переменную, распаковать в несколько глобальных переменных и т.д.

Ответ №1:

Не разделяйте переменные между используемыми методами global ; вместо этого сделайте их атрибутами объекта.

 class Game:

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

Глобальные переменные приводят к связыванию между методами, о которых трудно рассуждать.
Сегодня вы можете понять код,
но после того, как он вырастет на несколько недель, это будет совершенно другой зверь.

Кроме того, пожалуйста, следуйте рекомендациям PEP-8 по использованию snake_case имен методов и переменных for:

     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 вы можете переносить глобальные переменные в функцию и изменять их.