Передача нескольких переменных между функциями-Python - PullRequest
0 голосов
/ 04 февраля 2019

Код ниже возвращает NameError: имя 'c' не определено.Функция Score предоставляет возвращаемые значения для c, d, но мне трудно передать их в функцию регулировки, чтобы получить вывод e, f.Как я могу получить c, d в функцию регулировки?

def score():
    a=1
    b=2
    def outcome_1():
        c=a+1
        d=b-1
        return c,d
    def outcome_2():
        c=a+2
        d=b-2
        return c,d
    if a>0:
        outcome_1()
    elif a<0:
        outcome_2()


def adjust(score_results):
    def adjust_1():
        e=c+5
        f=d+4
        print(e,f)
    def adjust_2():
        e=c+4
        f=d+5
        print(e,f)

    adjust_1()

x=score()
adjust(x)

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

во-первых, вы ничего не возвращаете, когда вызываете result_1 и result_2, во-вторых, когда вы возвращаете несколько значений из функции, она возвращает кортеж, содержащий эти значения, поэтому вам необходимо обращаться к нему таким же образом внутри функции регулировки.Вы не можете ожидать, что python поймет, что score_results содержит c и d, он просто имеет значения обеих переменных в виде кортежей.Вот модификации, которые вам нужно сделать в вашем коде.

def score():
    a=1
    b=2
def outcome_1():
    c=a+1
    d=b-1
    return c,d
def outcome_2():
    c=a+2
    d=b-2
    return c,d
if a>0:
    return outcome_1()
elif a<0:
    return outcome_2()


def adjust(score_results):
    def adjust_1():

        e=score_results[0]+5
        f=score_results[1]+4
        print(e,f)
    def adjust_2():

        e=score_results[0]+4
        f=score_results[1]+5
        print(e,f)

    adjust_1()

x=score()
adjust(x)
0 голосов
/ 04 февраля 2019

Сначала необходимо добавить возврат в функцию оценки, в настоящий момент только функция результата возвращает значения, затем она остается только в области действия функции оценки

Как это было также предложено quamrana вы должны рассмотреть возможность изменения условий if, я добавил предложение в качестве комментария

def score():
    a=1
    b=2
    def outcome_1():
        c=a+1
        d=b-1
        return c,d
    def outcome_2():
        c=a+2
        d=b-2
        return c,d
    # Here you should consider changing it to if - else or adding >= 0 in order to cover all possible options
    if a>0:
        return outcome_1()
    elif a<0:
        return outcome_2()

Затем вы передаете x в качестве аргумента функциям настройки, которые являются правильными дляделайте, но вы не используете параметр score_results, который содержит указатель для вашего аргумента x (который вы передали)
Таким образом, вы можете определить c и d в начале своей функции регулировки, чтобы иметь эти переменные внутриобъем регулировки:

def adjust(score_results):
    c, d = score_results
    def adjust_1():
        e=c+5
        f=d+4
        print(e,f)
    def adjust_2():
        e=c+4
        f=d+5
        print(e,f)

    adjust_1()

x=score()
adjust(x)
...