Python从各种函数返回变量

时间:2012-07-13 02:04:57

标签: python function variables return

from __future__ import division
import math

def main():
    the_discriminant = discrim(1,0,-4)
    print the_discriminant
    the_rest(discrim,b,a)

def discrim(a,b,c):
    discriminant = math.sqrt(math.pow(b,2)-4*a*c)
    return discriminant, b,a

def the_rest(discrim,b,a):
    x = ((-b + discriminant) / 2*a)
    y = ((-b - discriminant) / 2*a)
    print x,y

if __name__ == '__main__':
    main()

我是Python的新手,我正在编写函数和返回变量,我对如何纠正代码感到有些困惑。我正在编写一个二次求解器程序,但我需要在“其余”函数中使用判别式和a,b,c值。 (这完成了其余的等式。)我对如何返回值并在另一个函数中使用它感到困惑。谢谢!

4 个答案:

答案 0 :(得分:7)

the_rest(*the_discriminant)

或(我更喜欢这种方法):

d, b, a = discrim(1, 0, -4)
the_rest(d, b, a)

答案 1 :(得分:2)

我相信这是你要做的。你的discrim函数返回一个元组(类似于数组)。然后,当您使用the_rest调用*时,表示您要发送元组的元素,而不是将元组本身作为一个参数

from __future__ import division
import math

def main():
    the_discriminant = discrim(1,0,-4)
    print the_discriminant
    the_rest(*the_discriminant)

def discrim(a,b,c):
    discriminant = math.sqrt(math.pow(b,2)-4*a*c)
    return discriminant, b,a

def the_rest(discrim,b,a):
    x = (-b + discrim) / (2*a)
    y = (-b - discrim) / (2*a)
    return x, y

if __name__ == '__main__':
    main()

答案 2 :(得分:1)

虽然jamylak的回答是正确的,但返回一个简单的类也可以更加可维护。然后,如果您更改了函数/返回值/表示,则调用代码:

  • 是基于名称/标识符的;变化非常灵活;它不依赖于顺序,或依赖于元组长度。它还可以节省您在整个代码中输入隐含规则的输入和不必要的重复。
  • 如果有重大更改,解释器将在模块加载时而不是在运行时出错,因此您不会错过错误。这是因为您正在尝试访问命名成员,并且不依赖于某些“隐藏”或“隐含”规则,例如在代码中未正式化的元组排序。

对于更大的项目来说,这绝对是最佳选择。

答案 3 :(得分:0)

在你的discrim版本中返回元组没有任何问题。但是代码并没有那么多意义(IMO)。

尝试如下:

#!/usr/bin/env python

from __future__ import division
import math

def main():
    a = 1
    b = 0
    c = -4
    the_discriminant = discrim(a, b, c)
    print the_discriminant
    x, y = the_rest(the_discriminant,b,a)
    print x, y

def discrim(a,b,c):
    discriminant = math.sqrt(math.pow(b,2)-4*a*c)
    return discriminant

def the_rest(d, b,a):
    x = ((-b + d) / 2*a)
    y = ((-b - d) / 2*a)
    return x,y

if __name__ == '__main__':
    main()
相关问题