传递之间的多变量函数的Python

问题描述 投票:-1回答:2

下面的代码返回NameError:名字“C”没有定义。比分功能提供返回值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)
python oop closures decorator
2个回答
0
投票

首先,你需要添加的得分函数返回,此刻唯一的结局函数返回的值,那么它在比分功能的范围仅保留

因为它也被quamrana建议你应该考虑改变你的,如果条件下,我添加了一个建议的评论

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作为参数传递给函数调整至极是做正确的事,但你不使用它持有指针的自变量x的参数score_results(已通过) 所以,你可以为了有调整的范围内提纲变量的调节功能的开头定义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)

-1
投票

首先你不返回任何东西的,当你调用outcome_1和outcome_2,其次,当您返回从函数返回一个包含这些值,因此您需要访问它以这种方式调节内部功能的元组多个值。你不能指望蟒明白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)
© www.soinside.com 2019 - 2024. All rights reserved.