Разрешить функции использовать локальную переменную, созданную в другой функции

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

1)

def randomQuestions(self):
   x = 9*5
   y = 7*4

   return x
   return z

def create_question_widgets(self):
   print(x)
   print(z)

2)

def randomQuestions(self):
   x = 9*5
   z = 7*4

   self.create_question_widgets(self,x,z)

def create_question_widgets(self,x,z):
   print(x)
   print(z)

Я новичок / плохой программист, поэтому, пожалуйста, снесите мой плохой код. Я также погуглил, что делать, но это мне не очень помогло. Спасибо.

Когда функции являются частью класса, важно, чтобы вы предоставили определение класса, так как это важная часть вашего кода.

Olivier Melançon 13.09.2018 21:20

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

AR_ 13.09.2018 21:24

Тем не менее, я мог предположить, что вы использовали класс. Я предлагаю вам отредактировать свой вопрос для ясности, но вы можете взглянуть на уже предоставленные ответы, которые учитывают это.

Olivier Melançon 13.09.2018 21:26
1
3
45
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ошибки

Ошибка в вашей первой попытке состоит в том, что у вас есть два оператора return. Как только функция вернется, она остановится. Хотя можно вернуть несколько значений как tuple.

return x, y

Ошибка во второй попытке заключается в том, что вам не нужно указывать self в качестве аргумента для метода привязки isntance. Передается неявно.

self.create_question_widgets(x, z)

Решение

Хотя, похоже, это методы из какого-то класса. Это означает, что вы можете хранить x и y как атрибуты экземпляра.

class Foo:
    def randomQuestions(self):
        self.x = 9 * 5
        self.y = 7 * 4

    def create_question_widgets(self):
        print(self.x)
        print(self.y)

foo = Foo()
foo.randomQuestions()
foo.create_question_widgets()

Выход

45
28

Если быть точным, return x, y не возвращает двух значений. Он возвращает один кортеж, содержащий два значения.

Matthias 13.09.2018 22:10

Если вы создадите атрибуты экземпляра x и y, например:

self.x = 9*5
self.y = 7*4

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

def create_question_widgets(self):
   print(self.x)
   print(self.z)

Другие вопросы по теме