Python, передающий переменные через функции

#python

#python

Вопрос:

Я изучаю python уже 2 дня. Итак, я создаю эту программу, которая генерирует разные числа и добавляет их в строку. У меня есть функция для получения случайных чисел:

 def GetRandomNumbers():
    random_number = random.choice(zero_to_nine)
    two_random_number = random.choice(zero_to_nine)
    three_random_number = random.choice(zero_to_nine)
    four_random_number = random.choice(zero_to_nine)
  

//

 def SettingVariables():
    first_combination = ("__asm _emit "   zero   ("x")   random_number   " "   "/")
    two_first_combination = ("__asm _emit "   zero   ("x")   two_random_number   " "   "/")
    three_first_combination = ("__asm _emit "   zero   ("x")   three_random_number   " "   "/")
    four_first_combination = ("__asm _emit "   zero   ("x")   four_random_number   " "   "/")
  

И затем, когда я пытаюсь использовать эти сгенерированные переменные в другой функции, где эти числа добавляются в текст, он не идентифицируется. Я знаю, что это как-то связано с глобальными переменными, но мне понадобятся некоторые объяснения.

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

1. Не могли бы вы расширить свой вопрос полным кодом вашей программы?

2. Возможно GetRandomNumbers() , следует вернуть значение?

3. Функции имеют свою собственную область видимости, вы не можете получить доступ к объектам, которые объявлены в отдельной «области видимости». Вот хороший ресурс для изучения областей: w3schools.com/python/python_scope.asp

4. pastebin.com/BYyiM6T2

5. Привет, вам, вероятно, не удастся изучить язык программирования без курса или изучения литературы, но это не должно мешать вам делать это. Фантастический учебник (и даже бесплатный) для изучения Python — Think Python . Я рекомендую выполнять все упражнения!

Ответ №1:

Вероятно, вы должны возвращать значения из своей первой функции:

 def GetRandomNumbers():
    ... # get your numbers
    return random_number, two_random_number, ...
  

Затем вы можете проанализировать эти числа в качестве аргумента для вашей второй функции:

 def SettingVariables(first_num, second_num, third_num): ...
  

Вы можете установить глобальную переменную следующим образом (это не рекомендуется):

 global var
var = 1
  

Ваш код может выглядеть следующим образом:

 def GetRandomNumbers():
    random_number = random.choice(zero_to_nine)
    two_random_number = random.choice(zero_to_nine)
    three_random_number = random.choice(zero_to_nine)
    four_random_number = random.choice(zero_to_nine)
    return random_number, two_random_number, three_random_number, four_random_number 

def SettingVariables(random_number, two_random_number, three_random_number, four_random_number):
    first_combination = ("__asm _emit "   zero   ("x")   random_number   " "   "/")
    two_first_combination = ("__asm _emit "   zero   ("x")   two_random_number   " "   "/")
    three_first_combination = ("__asm _emit "   zero   ("x")   three_random_number   " "   "/")
    four_first_combination = ("__asm _emit "   zero   ("x")   four_random_number   " "   "/")

# later in the program
nums = GetRandomNumbers()
SettingVariables(nums[0], nums[1], nums[2], nums[3]) # could also use *nums

  

Обратите внимание, что ваша функция SettingVariables также должна возвращать «комбинации». Затем вы можете использовать тот же принцип

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

1. Использование global в качестве первого варианта — плохой совет

2. пожалуйста, не советуйте использовать global подобное

Ответ №2:

Интересно, что ваши имена функций содержат ключевое get слово и set . Это концепция, знакомая классам. Вы можете рассмотреть возможность определения некоторых классов здесь. Примером может быть

 class RandomNumbers:
        def __init__(self, zero_to_nine):
            random_number = random.choice(zero_to_nine)


class Variables:
    def __init__(self, random_numbers):
        self.first_combination = ("__asm _emit "   zero   ("x")   random_numbers.random_number   " "   "/")
        ...
  

Тогда вы можете сделать так:

 random_numbers = RandomNumbers()
variables = Variables(random_numbers)
print(variables.first_combination)
  

[править / править код]

Я предложил классы, поскольку кажется, что вы используете функции в качестве инициализаторов. Они очень похожи на то, что в ООП являются конструкторами объектов.
Это позволило бы избежать необходимости объявлять все переменные вне функции, обновлять их при возврате из функции.

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

1. Как это похоже на то, что пытается сделать OP? Я не вижу связи с вопросом, можете ли вы расширить?