Python从各种函数返回变量

Python从各种函数返回变量,python,function,variables,return,Python,Function,Variables,Return,我对Python相当陌生,我正在编写函数和返回变量,我对如何更正代码有点困惑。我正在写一个二次解算程序,但我需要在“rest”函数中使用判别式和a、b、c值。(这就完成了方程的其余部分。)我对如何返回值并在另一个函数中使用它们有些困惑。谢谢 from __future__ import division import math def main(): the_discriminant = discrim(1,0,-4) print the_discriminant th

我对Python相当陌生,我正在编写函数和返回变量,我对如何更正代码有点困惑。我正在写一个二次解算程序,但我需要在“rest”函数中使用判别式和a、b、c值。(这就完成了方程的其余部分。)我对如何返回值并在另一个函数中使用它们有些困惑。谢谢

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()
或者(我更喜欢这种方法):


像您的
discrim
版本那样返回元组没有什么错。但是代码就是没有那么有意义(依我看)

试着这样做:

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

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

#!/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()

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

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

对于一个更大的项目来说,这绝对是一个不错的选择。

谢谢!我现在想起来似乎很明显……对不起,我的问题是noob!:/布莱恩,你的方法看起来也很吸引人,但它并没有发挥应有的作用。我得到错误“未定义全局变量鉴别器。(x=(-b+鉴别器)/2*a))我们缺少什么?抱歉,它仍然不工作,这是我在解释器中得到的…>>>4.0回溯(最近一次调用):文件“C:\Users\Ravi\Documents\Python Scripts\quadraic3.py,第34行,在main()文件“C:\Users\Ravi\Documents\Python Scripts\quadraic3.py”中,第21行,在main x中,y=the_rest(discrim,b,a)文件“C:\Users\Ravi\Documents\Python Scripts\quadraic3.py”,第29行,the_rest x=(-b+discrim)/2*a)类型错误:不支持的+操作数类型:'int'和'function'谢谢Brian,看起来很棒。。我也会记住这一点!:)
#!/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()
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()