Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Python中的另一个函数中为函数赋值_Python - Fatal编程技术网

如何从Python中的另一个函数中为函数赋值

如何从Python中的另一个函数中为函数赋值,python,Python,我有一个解二次方程的函数: class QuadEq(object): def __init__(self, a, b, c): self.a = a self.b = b self.c = c def solve_quad_eq(self): D = self.b**2-4*self.a*self.c if D >= 0: x1 = (-self.b-math.sqr

我有一个解二次方程的函数:

class QuadEq(object):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def solve_quad_eq(self):
        D = self.b**2-4*self.a*self.c
        if D >= 0:
            x1 = (-self.b-math.sqrt(D))/2*self.a
            x2 = (-self.b+math.sqrt(D))/2*self.a
            answer = [x1, x2]
            return answer
        else:
            return 0
在同一个类中,我有一个函数:

 def show_result(self):
    print answer
如果我们需要的话,可以打印二次方程的答案


如何将上面函数中的答案列表提供给此函数以打印?

使答案成为类的成员。并通过自我回答引用它


让答案成为班上的一员。并通过自我回答引用它


将其存储在对象本身中:

class QuadEq(object):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
        self.solution = None

    def solve_quad_eq(self):
        if self.solution is None:
            D = self.b**2-4*self.a*self.c
            if D >= 0:
                x1 = (-self.b-math.sqrt(D))/2*self.a
                x2 = (-self.b+math.sqrt(D))/2*self.a
                self.solution = [x1, x2]
            else:
                self.solution = 0
        return self.solution

    def show_result(self): # <--- just an alias to solve_quad_eq
        return self.solve_quad_eq()

将其存储在对象本身中:

class QuadEq(object):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
        self.solution = None

    def solve_quad_eq(self):
        if self.solution is None:
            D = self.b**2-4*self.a*self.c
            if D >= 0:
                x1 = (-self.b-math.sqrt(D))/2*self.a
                x2 = (-self.b+math.sqrt(D))/2*self.a
                self.solution = [x1, x2]
            else:
                self.solution = 0
        return self.solution

    def show_result(self): # <--- just an alias to solve_quad_eq
        return self.solve_quad_eq()
将answer保留为成员变量

def solve_quad_eq(self):
    D = self.b**2-4*self.a*self.c
    if D >= 0:
        x1 = (-self.b-math.sqrt(D))/2*self.a
        x2 = (-self.b+math.sqrt(D))/2*self.a
        self.answer = [x1, x2]
        return self.answer
    else:
        return 0

def show_result(self):
    print self.answer
将answer保留为成员变量

def solve_quad_eq(self):
    D = self.b**2-4*self.a*self.c
    if D >= 0:
        x1 = (-self.b-math.sqrt(D))/2*self.a
        x2 = (-self.b+math.sqrt(D))/2*self.a
        self.answer = [x1, x2]
        return self.answer
    else:
        return 0

def show_result(self):
    print self.answer

你真的不能;除非你让答案成为这个班的一员

class QuadEq(object):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def solve_quad_eq(self):
        D = self.b**2-4*self.a*self.c
        if D >= 0:
            x1 = (-self.b-math.sqrt(D))/2*self.a
            x2 = (-self.b+math.sqrt(D))/2*self.a
            answer = [x1, x2]
            return answer
        else:
            return 0

    def show_result(self):
        if self.answer is None:
            self.answer =  solve_quad_eq()
        print self.answer
或者做一些像这样简单的事情

def show_result(self):
    print self.solve_quad_eq()

你真的不能;除非你让答案成为这个班的一员

class QuadEq(object):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def solve_quad_eq(self):
        D = self.b**2-4*self.a*self.c
        if D >= 0:
            x1 = (-self.b-math.sqrt(D))/2*self.a
            x2 = (-self.b+math.sqrt(D))/2*self.a
            answer = [x1, x2]
            return answer
        else:
            return 0

    def show_result(self):
        if self.answer is None:
            self.answer =  solve_quad_eq()
        print self.answer
或者做一些像这样简单的事情

def show_result(self):
    print self.solve_quad_eq()

如果函数以错误的顺序运行,则可能引发异常:

class QuadEq(object):
def __init__(self, a, b, c):
    self.answer = None

    #Rest of program...

def show_result(self):
    if self.answer is None:
        raise RuntimeError('Error in QuadEq, tried to print result before solving equation')
    print self.answer

如果函数以错误的顺序运行,则可能引发异常:

class QuadEq(object):
def __init__(self, a, b, c):
    self.answer = None

    #Rest of program...

def show_result(self):
    if self.answer is None:
        raise RuntimeError('Error in QuadEq, tried to print result before solving equation')
    print self.answer

简短的答案已经发布了。使用自我回答:

不严格地说,实例变量数据成员只是一个变量,其生命周期与示例中其所有者的生命周期相同,即eq引用的对象

现在,对于一个长的,稍微有点迂腐的答案:当设计一个类时,你必须考虑它和它的。简单地说,你上课的目的是什么?它只是各种或多或少相关功能的容器吗?在这种情况下,上述答案完全可以接受。但通常情况下,您必须更加严格—至少是为了提高代码的可理解性/可维护性

这里有一个QuadEq类。通过它的名字,我知道这个类的一个实例模拟了一个等式。由于这样一个方程的根是该方程的一个性质,我认为可以接受将该方法作为该类方法来求解。稍作修改后,我将使用更通用的名称solve。为什么?因为这为将来的不同方程类提供了相同的语义。此外,返回结果和将结果存储在实例变量中可能会令人困惑。你应该在这里做出选择。不提函数有时返回根的事实,其他时间根的数量为0

现在,印刷。我更怀疑这一点。显示本身不是方程式的固有属性。如果你这样做,你很快就会在你的方程类中处理与方程完全无关的问题:如何在文件中写入?二进制还是文本?我应该使用哪种编码?如何处理I/O错误?等等

因此,如果我是你,我会推动,只提供一个访问器方法来返回根,并从外部显示它们。因为这似乎很重要,我在这里保留了访问器和求解方法之间的分离,对于某些类型的方程,它们可能需要大量的计算。仅将实例变量self.answer用作缓存

以下是一个完整的示例:

class Eq(object):
    def __init__(self):
        self.answer = None # this should be calles "roots", no?

    def roots(self):
        if self.answer is None:
            self.solve()

        return self.answer

class QuadEq(Eq):
    def __init__(self, a, b, c):
        Eq.__init__(self)

        self.a = a
        self.b = b
        self.c = c

    def solve(self):
        self.answer = ("this", "that")
        return 2

eq = QuadEq(1,2,3)
print(eq.roots())
请注意,现在在程序中添加其他类型的方程来求解是多么容易

class OtherEq(Eq):
    def __init__(self, a, b, c):
        Eq.__init__(self)

        self.a = a
        self.b = b
        self.c = c

    def solve(self):
        self.answer = ( "it", )
        return 1
。。。更重要的是,使用这种新方程的代码与前一个方程几乎相同:

eq = OtherEq(1,2,3)
print(eq.roots())

简短的答案已经发布了。使用自我回答:

不严格地说,实例变量数据成员只是一个变量,其生命周期与示例中其所有者的生命周期相同,即eq引用的对象

现在,对于一个长的,稍微有点迂腐的答案:当设计一个类时,你必须考虑它和它的。简单地说,你上课的目的是什么?它只是各种或多或少相关功能的容器吗?在这种情况下,上述答案完全可以接受。但通常情况下,您必须更加严格—至少是为了提高代码的可理解性/可维护性

这里有一个QuadEq类。通过它的名字,我知道这个类的一个实例模拟了一个等式。由于这样一个方程的根是该方程的一个性质,我认为可以接受将该方法作为该类方法来求解。稍作修改后,我将使用更通用的名称solve。为什么?因为这为将来的不同方程类提供了相同的语义。此外,返回结果和将结果存储在实例变量中可能会令人困惑。你应该在这里做出选择。不提函数有时返回根的事实,其他时间根的数量为0

现在,印刷。我更怀疑这一点。显示本身不是方程式的固有属性。如果你这样做,你很快就会在你的方程类中处理与方程完全无关的问题:如何在文件中写入?二进制o r文本?我应该使用哪种编码?如何处理I/O错误?等等

因此,如果我是你,我会推动,只提供一个访问器方法来返回根,并从外部显示它们。因为这似乎很重要,我在这里保留了访问器和求解方法之间的分离,对于某些类型的方程,它们可能需要大量的计算。仅将实例变量self.answer用作缓存

以下是一个完整的示例:

class Eq(object):
    def __init__(self):
        self.answer = None # this should be calles "roots", no?

    def roots(self):
        if self.answer is None:
            self.solve()

        return self.answer

class QuadEq(Eq):
    def __init__(self, a, b, c):
        Eq.__init__(self)

        self.a = a
        self.b = b
        self.c = c

    def solve(self):
        self.answer = ("this", "that")
        return 2

eq = QuadEq(1,2,3)
print(eq.roots())
请注意,现在在程序中添加其他类型的方程来求解是多么容易

class OtherEq(Eq):
    def __init__(self, a, b, c):
        Eq.__init__(self)

        self.a = a
        self.b = b
        self.c = c

    def solve(self):
        self.answer = ( "it", )
        return 1
。。。更重要的是,使用这种新方程的代码与前一个方程几乎相同:

eq = OtherEq(1,2,3)
print(eq.roots())

return self.solve_quad_eqself可能应该是return self.solve_quad_eqreturn self.solve_quad_eqself可能应该是return self.solve_quad_eqself。