在函数之间传递多个变量-Python

时间:2019-02-04 11:31:37

标签: python oop closures decorator

下面的代码返回NameError:未定义名称'c'。分数函数提供c,d的返回值,但是我很难将它们传递到adjust函数中以获取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 :(得分:0)

首先,您需要在得分函数中添加返回值,此刻只有结果函数返回值,然后才保留在得分函数的范围内

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作为参数传递给函数Adjust wich是正确的做法,但是您不使用参数score_results来保存参数x(已传递)的指针
因此,您可以在adjust函数的开头定义c和d,以便将这些变量包含在adjust范围内:

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)

答案 1 :(得分:-1)

首先,当您调用result_1和result_2时,您什么也不返回, 其次,当您从函数返回多个值时,它会返回一个包含这些值的元组,因此您需要以这种方式在adjust函数中进行访问。您不能指望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)