【问题标题】:Python returning variables from various functionsPython从各种函数返回变量
【发布时间】:2012-07-13 02:04:57
【问题描述】:
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 值。 (它完成了等式的其余部分。)我对如何返回值并在另一个函数中使用它们感到困惑。谢谢!

【问题讨论】:

    标签: python function variables return


    【解决方案1】:
    the_rest(*the_discriminant)
    

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

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

    【讨论】:

    • 谢谢!现在我想起来似乎很明显..抱歉这个菜鸟问题! ://
    【解决方案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()
    

    【讨论】:

      【解决方案3】:

      虽然 jamylak 的回答是正确的,但返回一个简单的类也更易于维护。那么如果你改变了你的函数/返回值/表示,调用代码:

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

      对于更大的项目,这绝对是要走的路。

      【讨论】:

        【解决方案4】:

        在您的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()
        

        【讨论】:

        • Brian,你的方法看起来也很吸引人,但它并没有按原样工作。我收到错误“未定义全局变量判别式。(x = ((-b + 判别式) / 2*a)) 我们缺少什么?
        • 对不起,它仍然不工作,这是我在解释器中得到的... >>> 4.0 Traceback(最近一次调用最后):文件“C:\ Users \ Ravi \ Documents \ Python Scripts\quadratic3.py",第 34 行,在 main() 文件中 "C:\Users\Ravi\Documents\Python Scripts\quadratic3.py",第 21 行,在 main x, y = the_rest(discrim,b ,a) 文件“C:\Users\Ravi\Documents\Python Scripts\quadratic3.py”,第 29 行,在 the_rest x = ((-b + discrim) / 2*a) 类型错误:不支持的操作数类型+: 'int' 和 'function'
        • 谢谢布赖恩,看起来很棒。我也会记住这一点! :)
        猜你喜欢
        • 1970-01-01
        • 2016-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 2018-03-26
        相关资源
        最近更新 更多