Проблема с вызовом переменной из одной функции в другую - PullRequest
0 голосов
/ 31 августа 2018

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

def G():
    x = 2
    y = 3
    g = x*y
    return g

def H():
    r = 2*G(g)
    print(r)
    return r
H()

Когда я запускаю код, я получаю следующую ошибку NameError: name 'g' is not defined

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Ваша функция def G(): возвращает переменную. Поэтому, когда вы вызываете его, вы присваиваете новую переменную для возвращаемой переменной.

Поэтому вы можете использовать следующий код:

def H():
    G = G()
    r = 2*G
    print (r)

Вам не нужно давать это утверждение:

return r
0 голосов
/ 31 августа 2018

Пока вы приняли ответ выше, я хотел бы потратить время, чтобы помочь вам выучить и очистить ваш код.

NameError: name 'g' is not defined

Вы получаете эту ошибку, потому что g является локальной переменной функции G()

Чистая версия:

def multiple_two_numbers():
    """
      Multiplies two numbers

      Args:
        none

      Returns:
        product : the result of multiplying two numbers
    """

    x = 2
    y = 3
    product = x*y
    return product


def main():

    result = multiple_two_numbers()
    answer = 2 * result
    print(answer)

if __name__ == "__main__":
    # execute only if run as a script
    main()

Проблемы с вашим кодом:

  1. Имеют понятные имена переменных и методов. g и G могут сбивать читателя с толку.

  2. Вы не используете if __name__ == "__main__":

  3. Ваш возврат в H() не требуется, а также функция H().

  4. Используйте строки документов, чтобы сделать ваш код более читабельным.

Вопросы из комментариев :

У меня один вопрос: а что, если бы в первой было две или более переменных? функция, но я хочу вызвать только один из них

Ваша функция может иметь столько переменных, сколько вы хотите. Если вы хотите вернуть более одной переменной, вы можете использовать словарь (ключ, значение) List или Tuple. Все зависит от ваших требований.

Нужно ли давать новые имена, a и b, новым переменные или я могу использовать те же x и g?

Абсолютно! Объявление другой переменной с именем x или y приведет к перезаписи предыдущего объявления. Это может затруднить отладку, и вы и читатели вашего кода будете разочарованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...