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